我正在开发一个PhoneGap
application
,用户可以在其中导航服务器提供的一些页面。当用户导航到这些页面时,应用程序下载所有文件(HTML
、CSS
、JS
等),并将它们存储在iPad
中。这样,如果用户试图访问offline
的那些页面,则会提供本地文件。
此应用程序在iOS
7中运行良好。昨天,我决定将我的iPad
更新为iOS
8,起初它似乎奏效了:我可以下载文件,离线,并且仍然使用本地文件导航页面。我在Console
中得到的唯一错误是:
[Error] Deprecated attempt to access property 'userAgent' on a non-Navigator object.
当我更新我的应用程序或在安装了该应用程序的情况下使用"phonegap local run ios"时,问题就来了。无论何时,应用程序都无法加载本地文件:
Failed to load resource: The requested URL was not found on this server.
file:///var/mobile/Containers/Data/Application/7A3590E8-C78A-4F45-B5B9-51FD0BAFE524/Library/files/pages/7/7a56ab3cfa56fbd1b9c4becbf5dca4a2.jpg
文件在那里,我可以使用File
插件读取它们,但WebView无法加载它们。我这样引用它们:
<img src="file://localhost/var/mobile/Containers/Data/Application/7A3590E8-C78A-4F45-B5B9-51FD0BAFE524/Library/files/pages/7/7a56ab3cfa56fbd1b9c4becbf5dca4a2.jpg" >
我尝试使用Library
和Compatibility
作为iosPersistentFileLocation
,但结果是一样的。我将所有下载的文件标记为"不备份",以防止它们包含在iCloud
:中
fileEntry.setMetadata(function(){}, function(){}, {"com.apple.MobileBackup": 1});
起初我以为这是由iOS
8中加载本地文件的已知错误引起的,但我的应用程序正在加载它们,在我更新应用程序后它就停止了工作。
我有PhoneGap
和所有的plugins
更新到最后一个版本。我也尝试过使用Cordova
,结果也是一样。
有人知道我该如何解决这个问题,或者我应该在哪里报告这个错误吗?
谢谢!
我设法解决了它!我使用fileEntry.toURL获取要在HTML中使用的文件URL。如果我使用
fileEntry.toInternalURL()
相反,它运行良好。
对于内部URL,URL如下所示:
cdvfile://localhost/persistent/pages/7/0b0cc746c5e90ee7fc94b2c15d37d43e.png
我遇到了同样的问题,并设法解决了它。在我的情况下,我的问题是每次更新应用程序时,新应用程序的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
}
文件系统是一个在根目录中包含本机URL的对象。
希望它能有所帮助!