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

Cordova iOS: Failed to load resource: The requested URL was not found on this server

编辑: 当我尝试我已经尝试过的相同解决方案时,我得到了它与“cordova.file.documentsDirectory”一起工作,这一定是我上周错过的东西

原问题:

我正在 Cordova 9.0.0 中构建一个 Leaflet 地图应用程序,它需要能够下载、解压缩、删除解压缩文件,然后从移动设备上的解压缩目录访问图像以供离线使用。

我正在使用 Cordova 文件、FileTransfer 和 Zip 插件,应用程序在 Android 设备上按预期工作,但在 iOS(使用 cordova 平台 iOS 6.2.0 ).

我已经在 iPhone 5s(iOS 12.5.4) 设备,iPhone 8(iOS 14.5) 模拟器,iPhone 11(iOS 14.5) simulator in Xcode 我可以成功下载、解压缩、删除 zip 文件,然后通过访问地图块 cordova.file.tempDirectory+"name_of_unziped_directory/"cordova.file.applicationStorageDirectory+'Documents/name_of_unziped_directory/'(documentsDirectory) 或 cordova.file.documentsDirectory+'name_of_unziped_directory/' 离线时,但在 iPhone 11(iOS 14.7.1) 设备上进行测试时,我可以下载、解压缩和删除文件但无法访问地图图块,我收到错误消息:

Failed to load resource: The requested URL file:///private/var/mobile/Containers/Data/Application/<uuid>/tmp/unzip_directory/zoom/x_coord/y_coord/image.png was not found on this server

我正在尝试像这样访问地图图块(在这种情况下,我们通过 documentsDirectory 进行访问,但是如果我按照上面提到的那样更改路径,它会给出相同的结果):

 var mymap = L.map('mapid1').setView(coords, zoom);
 L.tileLayer(cordova.file.documentsDirectory + 'unzipped_directory/{z}/{x}/{y}.png', {
   attribution: 'Tiles &copy; Esri',
   maxZoom: 16,
   minZoom: 5,
   trackResize: false,
 }).addTo(mymap);

我在此处阅读了有关堆栈溢出的类似问题,并尝试了所有我看到的解决方案,但没有成功。

我试过的:

<platform name="ios">
    <preference name="scheme" value="app" />
    <preference name="hostname" value="localhost" />
</platform>

没有成功。

我已经尝试过其他类似问题的解决方案,但没有成功,如果我没有在这里列出它们,我很抱歉,但我试图解决这个问题大约一个星期,我忘记了我还有什么'已经试过了 也许我有什么不对或者我不理解文档我应该怎么做,如果你们有解决方案或建议我会很乐意尝试。

提前致谢!

我在 ios 的新版本中遇到了同样的问题。据我所知 window.WkWebView.convertFilePath([your file path]); 是不够的,我无法提供确切的解决方案,但我最终做的是:

if(path.startsWith("cdvfile://")) {
    resolveLocalFileSystemURL(path, p => {
       return WkWebView.convertFilePath(p.toURL())
    }
}

我用我已经尝试过的相同解决方案修复了它,并且我用 'cordova.file.documentsDirectory' 解决了它,我一定是在第一次尝试时遗漏了一些东西。

我通过使用 Cordova-ios v6.2.0 解决了这个问题 WkWebView.convertFilePath(cordova.file.dataDirectory+myfile) 并将架构和主机名首选项添加到 config.xml

<platform name="ios">
    <preference name="scheme" value="app" />
    <preference name="hostname" value="localhost" />
</platform>