gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-29 17:47:08 25 4
gpt4 key购买 nike

我有一个使用 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 操作系统中存在访问策略更改,但我无法弄清详细信息。我已确保代码中没有任何地方试图访问外部资源。

最佳答案

Antoine van Gelder 在这方面提供了难以置信的帮助。他的诊断是绝对正确的,jQuery Mobile 正在重写资源的 URL,这导致较新版本的 Android 的 Chrome Webview 在访问资源时失败。生成的 URL 在协议(protocol)后包含四重斜杠,如下所示:

内容:////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 函数:
    • 将返回值保存到一个临时变量
    • 通过删除四重斜线修改临时变量。
    • 我使用了一些非常具体且仅限于“内容”协议(protocol)的内容:“retVal = retVal.replace("content:////","content://");”
  • 返回固定的临时变量

关于android - Android 4.4 上的 Trigger.io 本地资源访问,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25675429/

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