使用Cordova 3.7(文件://)从iOS 8上的www文件夹加载资源

时间:2015-01-12 15:58:29

标签: cordova ios8

我有一个使用Cordova 3.7和jQuery Mobile 1.3.2在iOS 7上完美运行的混合应用程序

我在iOS 8上测试它并且它已经坏了。 我使用file://协议使用绝对路径请求我的应用的每个页面(视图),例如:

file:///var/mobile/Applications/<UUID>/MyApp.app/www/views/add-project.html

但我得到错误:

Failed to load resource: The requested URL was not found on this server.

我读到this bug,这是问题吗?

此外,在iOS 8上,www文件夹的位置与iOS 7略有不同,它解析为:

file:///var/mobile/Containers/Data/Application/<UUID>/MYApp.app/www/views/add-project.html

这是对的吗?

我尝试使用toURL()和toInternalURL()方法来获得绝对路径,如:

cdvfile://localhost/root/var/mobile/Containers/Bundle/Application/<UUID>/MyApp.app/但我总是得到同样的错误。 有什么建议吗?

由于

3 个答案:

答案 0 :(得分:9)

对于那些可能会觉得有用的人,我终于设法解决了这个问题。

ios 8+上www文件夹的完整路径是:

file:///private/var/mobile/Containers/Bundle/Application/<UUID>/<your_app>.app/www/

但是当您使用Cordova请求应用程序目录时,请执行以下操作:

window.resolveLocalFileSystemURL(cordova.file.applicationDirectory, onSuccess, onError);

它会给你一个错误的路径(iOS 8.1.2上的Cordova 3.7),如:

file:////var/mobile/Containers/Bundle/Application/<UUID>/<your_app>.app/

使用文档

上建议的toURL()方法

因此你需要手动做一些调整

var path = fileSystem.toURL();//given by the success callback 

IOS_ASSETS_ABS_PATH = path.replace("file:////", "file:///private/");

IOS_ASSETS_ABS_PATH += "www/";

和宾果!

答案 1 :(得分:4)

我遇到了同样的问题,我设法解决了这个问题。在我的情况下,我的问题是,每次我更新应用程序时,新应用程序的ID都不同于最后一个。例如,旧应用程序的路径是:

file:///var/mobile/Containers/Data/Application/7A3590E8-C78A-4F45-B5B9-51FD0BAFE524/Library/files/file.pdf

新人:

file:///var/mobile/Containers/Data/Application/1BC5FS-7B3B-90E8-C7C8-1B7C1984C2A71/Library/files/file.pdf

即使我的pdf文件仍在应用程序数据存储上,我也使用错误的路径,因为应用程序创建了一个新的应用程序ID。我通过创建一个新函数解决了这个问题,每次有更新时都会更新我的路径。我通过使用:

找到应用程序ID
window.requestFileSystem(LocalFileSystem.PERSISTENT, 0, onFileSystemSuccess, fail);

function onFileSystemSuccess(fileSystem) {
    // Do what you need here
}

文件系统是一个包含root中nativeURL的对象。

希望它有所帮助!

答案 2 :(得分:0)

遇到类似的问题,加入了WWW工作!

pic.style.backgroundImage = "url('../www/images/" + id + ".jpg')";