PhoneGap和iOS 8:仅在更新我的应用程序后才加载本地文件失败



我正在开发一个PhoneGap application,用户可以在其中导航服务器提供的一些页面。当用户导航到这些页面时,应用程序下载所有文件(HTMLCSSJS等),并将它们存储在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" >

我尝试使用LibraryCompatibility作为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的对象。

希望它能有所帮助!

相关内容

  • 没有找到相关文章