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

使用Cordova 3.7从iOS 8上的www文件夹加载资产(文件:/),cordova,ios8,Cordova,Ios8,我有一个混合应用程序,使用Cordova 3.7和jQuery Mobile 1.3.2在iOS 7上完美运行 我在iOS 8上测试它,它坏了。 我使用绝对路径请求我的应用程序的每个页面(视图),使用文件://协议,如: file:///var/mobile/Applications//MyApp.app/www/views/add-project.html 但我得到了一个错误: 加载资源失败:在此服务器上找不到请求的URL。 我读到,这就是问题所在吗 此外,在iOS 8上,www文件夹的位置与

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

我在iOS 8上测试它,它坏了。 我使用绝对路径请求我的应用程序的每个页面(视图),使用
文件://
协议,如:

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

但我得到了一个错误:

加载资源失败:在此服务器上找不到请求的URL。

我读到,这就是问题所在吗

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

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

这是正确的吗

我尝试了toURL()和toInternalURL()方法,以获得如下绝对路径:

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


多亏了那些觉得这个有用的人,我终于设法解决了这个问题

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

file:///private/var/mobile/Containers/Bundle/Application//.app/www/

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

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

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

file:////var/mobile/Containers/Bundle/Application//.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);
函数onFileSystemsSuccess(文件系统){
//在这里做你需要的
}
文件系统是根目录中包含nativeURL的对象


希望有帮助

为什么使用绝对路径?据我所知,该漏洞只影响WKWebView,而不影响UIWebView,如果您使用cordova,它会使用UIWebView,我无法加载任何文件。我之所以使用绝对路径,是因为应用程序是动态的,动态创建了大量视图,导航与相对URL有点混乱。我解决了它,这是Cordova中的一个bug,请参阅我的答案为什么要向下投票?请添加原因:/I我看到的文件路径是
file:///var/mobile/Containers/Data/Application/DFE05760-5582-4224-88BA-3BE034C553CF/tmp/myrecording.wav
使用Cordova媒体插件录制音频文件。你的调整不起作用。正确的路径应该是什么?谢谢。录制音频时,它会保存在缓存文件夹中,而不是
www
。查看
https://github.com/apache/cordova-plugin-file
。我的调整是使用绝对URL而不是文件加载html页面。将读取
www
文件夹-onlyfile://private/var/ 此pat无法触发webview方法-webview:shouldStartLoadWithRequest:navigationType:如何修复它?