我正在尝试在我的 Android 应用程序中呈现使用 jQueryMobile 创建的页面,但我需要在 webView 中以离线状态进行。
为此,我开始复制我的页面的 index.html 并将所有需要的资产直接放到我设备的内部存储中。file:///sdcard/index.html
然后,我在设备的内部浏览器和 Chrome 应用程序中输入,然后加载它,网站显示得很好,带有 jQuery 样式等等。
然后我进入我的应用程序,在那里我有一个 webView,这就是我实际需要呈现上述页面的地方。loadDataWithBaseURL()
我使用(因为这是我最终需要做的)加载页面,如下所示:
loadDataWithBaseURL("file:///android_asset/web/", html, "text/html", "UTF-8", null);
我将所有资产保存在资产文件夹的 web 目录中。
问题是,如果我在没有资产引用的情况下加载页面(只是正常调用loadUrl
),它会加载但显然没有样式或功能。当我把资产引用调用loadDataWithBaseURL
它时,确实正确地读取了资产引用,但是渲染被 jqueryMobile 的旋转轮卡住了,并且页面从未真正加载。这就是我所看到的:
所以总结一下:
我使用 jQuery Mobile 创建了一个网站。它只是一个带有 jQuery 样式的简单 html 页面。
我已经为离线加载做好了准备。我将所需的资产打包到一个文件夹中,并在 index.html 中相对引用了这些资产(例如
href="web/styles.css"
)。如果我在我的桌面浏览器中加载这个页面,没有连接,它可以工作。
如果我在我的移动浏览器(Chrome 或内部浏览器
)中加载此页面,它可以工作。如果我在我的 web 视图中加载此页面而没有资产引用, 它可以工作(没有样式或图像等)
如果我在我的 web 视图中使用资产引用加载此页面,它就
不起作用,它被旋转轮卡住了。连接不影响问题。如果我删除引用 jQM 样式表的行,则加载页面时没有其样式,但图像加载正确(因此对资产的引用是正确的)
请注意,旋转轮甚至不应该首先出现,因为我在 jQM 中完全禁用了 AJAX,使用:
<script>
$.mobile.ajaxEnabled = false;
</script>
奇怪的是,AFAIK 内部的 Android 网络浏览器和网络视图共享相同的渲染器,所以我不知道这里可能发生什么,而且由于它适用于常规浏览器,我可以调试正在发生的事情。
作为参考,这就是我定义我的 webView 的方式:
mWebView = (WebView) findViewById(R.id.webView);
WebSettings s = mWebView.getSettings();
s.setJavaScriptEnabled(true);
我有很多其他设置,但为了简化问题,我删除了它们,问题仍然存在。
有什么建议么?
PD。根据要求,发布 index.html 文件。这是最简单的例子,只是一个空索引。问题依然存在:
<!doctype html>
<html lang=es>
<head>
<meta charset="utf-8">
<meta name="apple-mobile-web-app-capable" content="yes">
<meta name="apple-touch-fullscreen" content="yes">
<meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
<meta name="format-detection" content="telephone=no" />
<meta name="HandheldFriendly" content="true" />
<meta name="MobileOptimized" content="320" />
<head>
<title>
My title
</title>
<script>
$.mobile.ajaxEnabled = false;
</script>
<script src="script/jquery/jquery-1.9.1.min.js"></script>
<script src="script/jquery/jquery.mobile-1.3.2.min.js"></script>
<link href="css/jquery.mobile-1.3.2.min.css" rel="stylesheet" media="screen" type="text/css" />
</head>
<body>
</body>
</html>