Android 4.4上的Trigger.io本地资源访问

时间:2014-09-04 21:42:29

标签: android jquery-mobile trigger.io

我有一个非常简单的HTML5应用程序,用trigger.io编写,无法在Android 4.4下运行,错误表明无法访问本地内容。例如:

E/AndroidProtocolHandler( 2236): Unable to open content URL: content:////io.trigger.forge9aee7db8338b11e4b77d1231392b77b0/src/images/connect4.jpg

在Android 4.3下可以找到相同的代码。这适用于所有本地内容,包括图像,CSS和JavaScript。所有资源都使用相对路径引用,例如“images / image.jpg”。

我最好的猜测是,在较新版本的Android操作系统中存在访问策略更改,但我无法弄清楚细节。我已经确保代码中没有任何地方尝试访问外部资源。

3 个答案:

答案 0 :(得分:2)

Antoine van Gelder对此非常有帮助。他的诊断绝对正确,jQuery Mobile正在重写资源的URL,这会导致更新版本的Android Chrome浏览器在访问资源时失败。生成的URL在协议之后包含四个斜杠:

内容:////io.trigger.forge9aee7db8338b11e4b77d1231392b77b0/src/resource.png

额外的斜杠会导致Webview失败。可能会过度检查是否存在正确性或安全隐患?

Antoine建议使用旧版本的jQuery Mobile或构建一个没有Base Tag的自定义jQuery Mobile可能会在某些情况下起作用,但在我的情况下这两种情况都不够。特别是,删除Base Tag也会删除我需要的其他一些功能。

另一种方法是对jQuery Mobile进行轻微破解。对于1.4.3版本,我执行了以下操作:

  • 编辑了jQuery Mobile的javascript
  • 的未缩小版本
  • 修改了getLocation函数:
    • 将返回值保存到临时变量
    • 通过删除四倍斜杠修改临时变量。
    • 我使用的东西非常具体,仅限于“内容”协议:“retVal = retVal.replace(”content:////“,”content://“);”
  • 返回固定的临时变量

答案 1 :(得分:1)

看起来,从v1.3开始,jQuery Mobile会重写您文档中的网址,这会破坏Chrome浏览器Webview对应用沙箱中文件的访问权限。

您可以尝试使用jQuery Mobile开发人员提交错误报告,但要在短期内对其进行排序,您的最佳选择可能是:

1)回到jQuery Mobile 1.2.1

2)构建一个自定义版本的jQuery Mobile,它排除了一些导航功能。 (转到下载构建器(http://jquerymobile.com/download-builder/),向下滚动到"导航"并取消选择"基本标记"模块)

答案 2 :(得分:0)

这应该在JqueryMobile 1.4.4中修复。