无法将位置更改为本地文件,例如 Phonegap 3.5 中的 cdvfile://path/index.html

Posted

技术标签:

【中文标题】无法将位置更改为本地文件,例如 Phonegap 3.5 中的 cdvfile://path/index.html【英文标题】:Cannot change location to local file eg cdvfile://path/index.html in Phonegap 3.5 【发布时间】:2014-09-01 01:58:04 【问题描述】:

我的应用使用FileAPI 复制设备上的文件。这在 Phonegap 3.4.0 和 3.5.0 中运行良好。

然后它通过 window.location = "cdvfile://localhost/persistent/TEST/index.html"; 打开一个 html 文件(请注意,路径不是硬编码的,而是使用类似 myDirEntry.toURL() 的东西,并且 3.4 和 3.5 给出相同的路径)。

这在 3.4.0 中运行良好(在多个版本的 androidios 上测试),但在 3.5.0 中不起作用(仅在 Android 4.1.2 和 4.4.2 上测试)。

尝试更改位置时,没有任何反应。应用停留在当前页面,似乎没有抛出异常。

在这两种情况下,我都使用 org.apache.cordova.file 插件版本 1.0.1(Phonegap Build 上提供的那个)。

Phonegap 3.5.0 有什么变化吗?

【问题讨论】:

【参考方案1】:

由于某种原因,您只需要在 Phonegap 3.5(在 Android 上测试)中使用 toNativeURL 而不是 toURL

toURL 给我cdvfile://localhost/persistent/Path/To/Folder toNativeURL 给我file:///storage/sdcard0/Path/To/Folder

使用toNativeURL 的优势在于使用file 协议而不是cdvfile,因此不存在同源策略问题(参见我的另一个问题AJAX blocked when using cdvfile - Phonegap)。

【讨论】:

【参考方案2】:

如果文件名包含任何空格,则接受的答案将不起作用,因为 toNativeURL 包含 url 编码。 [Xcode 5.1 及以下版本就是这种情况,因为数据存储在“Application Support”文件夹中。]

要解决这个问题,请使用:

decodeURI(NativeURL);在javascript中 filepath = [filepath stringByRemovingPercentEncoding];在 Objective-C 中

【讨论】:

以上是关于无法将位置更改为本地文件,例如 Phonegap 3.5 中的 cdvfile://path/index.html的主要内容,如果未能解决你的问题,请参考以下文章

将默认本地主机位置“/var/www/”更改为新位置

phonegap 推送插件 - 如何将 source="pgb" 更改为 npm

将.svn文件夹更改为Tortoise SVN中的另一个位置

文件位置更改为远程共享时出现 BULK INSERT 错误

将 NSURL 基本 URL 更改为另一个基本 URL

本地文件 phonegap 与在线构建应用程序