【问题标题】:Trigger.io Local Resource Access on Android 4.4Android 4.4 上的 Trigger.io 本地资源访问
【发布时间】:2014-09-04 21:42:28
【问题描述】:

我有一个使用 trigger.io 编写的非常简单的 HTML5 应用程序,它在 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 操作系统的访问策略发生了变化,但我无法弄清楚细节。我确保代码中没有任何地方试图访问外部资源。

【问题讨论】:

    标签: android jquery-mobile trigger.io


    【解决方案1】:

    Antoine van Gelder 在这方面非常有帮助。他的诊断是绝对正确的,即 jQuery Mobile 正在重写资源的 URL,这会导致较新版本的 Android 的 Chrome Webview 在访问资源时失败。生成的 URL 在协议之后包含四个斜杠,如下所示:

    content:////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://");"
    • 返回固定的临时变量

    【讨论】:

      【解决方案2】:

      看起来,从 v1.3 开始,jQuery Mobile 正在重写您文档中的 URL,这会破坏 Chrome Webview 对应用沙箱中文件的访问。

      您可以尝试向 jQuery Mobile 开发人员提交错误报告,但为了在短期内解决这个问题,您的最佳选择可能是以下之一:

      1) 回退到 jQuery Mobile 1.2.1

      2) 构建一个不包括一些导航功能的自定义版本的 jQuery Mobile。 (转到下载生成器(http://jquerymobile.com/download-builder/),向下滚动到“导航”并取消选择“基本标签”模块)

      【讨论】:

        【解决方案3】:

        这应该在 JqueryMobile 1.4.4 中修复。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2019-08-11
          • 1970-01-01
          • 2010-10-16
          • 1970-01-01
          • 1970-01-01
          • 2019-06-15
          • 2015-08-24
          • 2013-07-16
          相关资源
          最近更新 更多