gpt4 book ai didi

android - 从本地 Assets 加载时,jQuery Mobile 在 WebView 中不工作

转载 作者:塔克拉玛干 更新时间:2023-11-02 21:48:16 26 4
gpt4 key购买 nike

我正尝试在我的 Android 应用程序中呈现使用 jQueryMobile 创建的页面,但我需要在 webView 中以离线状态进行呈现。

为此,我开始复制我页面的 index.html 并将所有必需的资源直接带到我设备的内部存储中。然后我在我的设备的内部浏览器和 Chrome 应用程序中键入 file:///sdcard/index.html 加载它,网站显示得很好,有 jQuery 样式和所有。

然后我进入我的应用程序,那里有一个 webView,而这正是我实际需要呈现上述页面的地方。我使用 loadDataWithBaseURL() 加载页面(因为这是我最终需要做的),如下所示:

loadDataWithBaseURL("file:///android_asset/web/", html, "text/html", "UTF-8", null);

我将所有 Assets 保存在 Assets 文件夹的 Web 目录中。

问题是,如果我在没有 Assets 引用的情况下加载页面(通常只是调用 loadUrl),它会加载但显然没有样式或功能。当我将 Assets 引用调用 loadDataWithBaseURL 时,它确实正确地读取了 Assets 引用,但渲染卡在了 jqueryMobile 的旋转轮上,页面从未真正加载过。这是我看到的:

enter image description here

总结一下:

  • 我使用 jQuery Mobile 创建了一个网站。这只是一个简单的html具有 jQuery 样式的页面。

  • 我已经为离线加载做好了准备。我打包了所需的 Assets 放入一个文件夹中,在 index.html 中我相对地引用了这些 Assets (例如 href="web/styles.css")。

  • 如果我在没有连接的情况下在我的桌面浏览器中加载此页面,它有效

  • 如果我在我的移动浏览器(Chrome 或内部浏览器)中加载此页面
    一个),有效

  • 如果我加载此页面时没有我的 WebView 中的 Assets 引用,有效(无需样式或图像等)

  • 如果我在我的 WebView 中使用 Assets 引用加载此页面,它
    不起作用,它卡在了纺车上。连通性不会影响该问题。

  • 如果我删除引用 jQM 样式表的行,那么页面是在没有样式的情况下加载,但图像已正确加载(因此对 Assets 的引用正确的)

请注意,由于我在 jQM 中完全禁用了 AJAX,因此一开始就不应该出现纺车:

<script>
$.mobile.ajaxEnabled = false;
</script>

奇怪的是 AFAIK 内部 Android web 浏览器和 webviews 共享同一个渲染器,所以我不知道这里会发生什么,而且由于它在常规浏览器上工作正常,我可以调试正在发生的事情。

作为引用,这是我定义 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>

最佳答案

自己解决了。从 JellyBean 开始,webView 设置包括一个属性来禁用从文件资源加载,默认情况下它是禁用的。

从 Jelly 之前的设备运行我的应用程序工作正常,但我用于开发的两台设备都是基于 4.3 的。

我用下面的代码解决了这个问题,如果有人感兴趣的话:

    if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN){
s.setAllowUniversalAccessFromFileURLs(true);
s.setAllowFileAccessFromFileURLs(true);
}

关于android - 从本地 Assets 加载时,jQuery Mobile 在 WebView 中不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19379392/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com