链接到 iOS PhoneGap 3.3 上的本地文件 (cdvfile://)

Posted

技术标签:

【中文标题】链接到 iOS PhoneGap 3.3 上的本地文件 (cdvfile://)【英文标题】:Link to local files (cdvfile://) on iOS PhoneGap 3.3 【发布时间】:2014-04-02 04:22:32 【问题描述】:

为了轻松更新我的应用,我将 www 文件夹的内容复制到手机中,然后执行window.location = workingDirectory.toURL() + "/index.html"

编辑 - 请注意,这在 Phonegap 3.4 之前有效,但在 3.5 上无效(当我尝试更改位置时似乎没有发生任何事情)。如果我使用toNativeURL 而不是toURL,那么它也适用于3.5。 使用toNativeURL 也修复了iOS 上的当前问题

复制所有文件并打开索引在 iosandroid 上都可以正常工作。不过,iOS 上的问题是页面绝对没有样式,好像指向 CSS 文件的链接不起作用。在 Android 上一切正常。

我的链接是相对的(例如<link href="css/reseter.css" rel="stylesheet">)。指向其他页面或脚本的链接确实有效。

这是我打开的简化主页:

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <link href="style.css" rel="stylesheet">
    <script src="main.js"></script>
</head>
<body>
    <div class="red">I should be red but I'm not!</div>
    <a href="page2.html">This correctly takes me to the other page.</a>
</body>
</html>

style.css

.red  color: red; 

main.js

alert("HELLO is correctly displayed");

我正确地得到了alert(它的标题是cdvfile://localhost/),我也可以正确地转到page2.html。唯一的问题是样式。

如果我在 Safari 中打开指向我的计算机的页面,样式会正确显示。

我尝试了一些方法,但无济于事:

&lt;head&gt; 中添加&lt;base href="cdvfile://localhost/persistent/MyApp/"&gt; 更新我所有的 href 和 src 以获得完整的 cdvfile 路径(例如使用 &lt;link href="cdvfile://localhost/persistent/MyApp/css/reseter.css" rel="stylesheet"&gt;

【问题讨论】:

【参考方案1】:

我终于通过使用fileSystem.root.fullPathPhoneGap 2.9 中工作了。在 PhoneGap 3.3 上,它只返回 /。这是 PhoneGap 3.3 上的一个错误,当使用 cdvfile 时,除了 CSS 文件之外,一切似乎都可以工作?

我决定暂时使用相对路径到我在 PhoneGap 3.3 上的 iOS 应用:../../Documents/MyApp/index.html。我不知道它是否可以安全使用。

EDITPhonegap 3.5 中(我没有在 3.3 中测试过),使用工作 window.location = workingDirectory.toNativeURL() + "/index.html";(即 使用 toNativeURL 而不是 toURL ) 有效。

【讨论】:

我有同样的问题,我暂时使用 现在我正在使用该 hack,因为它确实有效,而且非常易于使用。如果新的 Phonegap 版本能解决问题,我将不得不不时进行测试。【参考方案2】:

检查以下链接(插件已更改): http://cordova.apache.org/news/2014/02/10/plugins-release.html

【讨论】:

确实在 2 月份发生了一些变化,但在我看来仍然是一个 bug,在 Android 上一切正常,除了 CSS 之外的一切都在 iOS 上运行...... issues.apache.org/jira/browse/CB-6532 我会尝试使用 Phonegap 3.4 和最新插件,看看它是否能解决问题。 Phonegap 3.4 和 org.apache.cordova.file 1.0.1 仍然存在同样的问题。 正如那里写的那样,使用 toURL 或 toNativeURL 方法。【参考方案3】:

您似乎遇到了CB-6532。我刚刚提交了一个修复请求——你可以暂时使用我的 fork,直到它被接受:

https://github.com/loufranco/cordova-plugin-file

要使用它,请执行

  cordova plugin remove org.apache.cordova.file
  cordova plugin add https://github.com/loufranco/cordova-plugin-file.git

如果拉取请求被接受,记得撤消它。

【讨论】:

以上是关于链接到 iOS PhoneGap 3.3 上的本地文件 (cdvfile://)的主要内容,如果未能解决你的问题,请参考以下文章

Android 上的 PhoneGap 3.3 和移动服务 HTML 应用程序

如何在 iOS 中使用自定义 phonegap 3.3 插件

Android 和 iOS 上的本地存储有多持久?

Cordova/Phonegap 3.3 中的外部链接/InAppBrowser 总是表现得像“_self”

未找到 Phonegap 3.3/Cordova iOS 地理位置

使用 AngularJS 在 iOS 的 PhoneGap 3.3 中登录 XCODE