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

Load assets from www folder on iOS 8 with Cordova 3.7 (file://)

我有一个混合应用程序,它使用 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,是这个问题吗?

另外,在iOS8,www文件夹的位置和iOS7有点不同,解析为:

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/ 但我总是得到同样的错误。 有什么建议吗?

谢谢

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

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/";

和宾果!

遇到了类似的问题,添加 WWW 成功了!

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

我运行遇到了同样的问题,我设法解决了。就我而言,我的问题是每次我更新应用程序时,新应用程序的 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
}

文件系统是一个对象,包含根目录中的 nativeURL。

希望对您有所帮助!