使用 Cordova 3.7 (file://) 从 iOS 8 上的 www 文件夹加载资产
Posted
技术标签:
【中文标题】使用 Cordova 3.7 (file://) 从 iOS 8 上的 www 文件夹加载资产【英文标题】:Load assets from www folder on iOS 8 with Cordova 3.7 (file://) 【发布时间】:2015-01-12 15:58:28 【问题描述】:我有一个使用 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/
但我总是遇到同样的错误。
有什么建议吗?
谢谢
【问题讨论】:
为什么要使用绝对路径?据我所知,这个bug只影响WKWebView,不影响UIWebView,如果你使用cordova,它使用UIWebView 我无法加载任何文件。我使用的是绝对路径,因为应用程序是动态的,有很多动态创建的视图,并且导航与相对 url 有点混乱。 我解决了,这是Cordova中的一个错误,看我的回答 【参考方案1】:对于那些可能觉得这很有用的人,我终于设法解决了这个问题。
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/";
还有宾果游戏!
【讨论】:
为什么要投反对票?请添加原因:/ 通过使用 Cordova Media Plugin 录制音频文件,我看到的文件路径是file:///var/mobile/Containers/Data/Application/DFE05760-5582-4224-88BA-3BE034C553CF/tmp/myrecording.wav
。你的调整不起作用。 正确的路径应该是什么?谢谢。
录制音频时,它保存在缓存文件夹中,而不是www
。查看https://github.com/apache/cordova-plugin-file
上的文件路径。我的调整是使用绝对 url 加载 html 页面,而不是文件。 www
文件夹是只读的
file://private/var/ 这个 pat 无法触发 webview 方法 - webView:shouldStartLoadWithRequest:navigationType: 我该如何解决?【参考方案2】:
我遇到了同样的问题,我设法解决了它。就我而言,我的问题是每次更新应用程序时,新应用程序的 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 的对象。
希望对你有帮助!
【讨论】:
【参考方案3】:遇到了类似的问题,添加 WWW 成功了!
pic.style.backgroundImage = "url('../www/images/" + id + ".jpg')";
【讨论】:
以上是关于使用 Cordova 3.7 (file://) 从 iOS 8 上的 www 文件夹加载资产的主要内容,如果未能解决你的问题,请参考以下文章
在 Windows 10 中使用 cordova-plugin-file 复制 SQLite 数据库 cordova-sqlite-storage
Cordova/Cordova.h file not found的解决方法
生成 apk 时出现 Cordova-plugin-file 错误
cordova打开文件系统插件的使用: cordova-plugin-file-opener2