使用 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。
希望对您有所帮助!
我有一个混合应用程序,它使用 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。
希望对您有所帮助!