无法将位置更改为本地文件,例如 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 中运行良好(在多个版本的 android 和 ios 上测试),但在 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的主要内容,如果未能解决你的问题,请参考以下文章
phonegap 推送插件 - 如何将 source="pgb" 更改为 npm