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

标签 javascript ios cordova wkwebview

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

原始问题:

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

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

我已经在Xcode中的iPhone 5s(iOS 12.5.4)设备、iPhone 8(iOS 14.5)模拟器、iPhone 11(iOS 14.5)模拟器上测试过,我可以成功下载、解压、删除zip文件然后访问 map 瓦片通过 cordova.file.tempDirectory+"name_of_unziped_directory/"或者 cordova.file.applicationStorageDirectory+'Documents/name_of_unziped_directory/' (文档目录)或 cordova.file.documentsDirectory+'name_of_unziped_directory/'离线时,但在 iPhone 11(iOS 14.7.1) 设备上进行测试时,我可以下载、解压缩和删除文件,但无法访问 map 图 block ,并且出现错误:

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

我正在尝试像这样访问 map 图 block (在这种情况下,我们通过 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);

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

我尝试过的:

  • 我尝试将 tempDirectory 或 applicationStorageDirectory+'Documents/'(documentsDirectory) 更改为 Cordova 文件插件官方文档中列出的每个目录,但没有任何变化。

  • 尝试使用“file:///”更改路径,不使用“file:”,但使用 3 个斜杠“///”,只有一个斜杠“/”,没有斜杠,但我认为这没什么区别,因为我总是收到相同的错误消息 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

  • 尝试使用“cdvfile://”和“file://”并将其转换为 window.WkWebView.convertFilePath([your file path]);

  • 尝试安装 cordova-plugin-uiwebview-engine,因为如果我理解正确的话,它允许访问应用程序之外的文件

  • 尝试创建一个方案,例如:

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

没有成功。

  • 我在 config.xml 中的访问标签设置如下:<access origin="*" />

  • 在我的元 CSP 标签中添加了“gap:”和“cdvfile:”,没有任何变化

  • 我读过一些 HTTP 服务器通过 Ajax 从文件系统提供这些文件,但恐怕这是不可能的,因为我的上司告诉我要避免这种解决方案

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

提前致谢!

最佳答案

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

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

关于javascript - Cordova iOS : Failed to load resource: The requested URL was not found on this server,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/68893157/

相关文章:

javascript - parse.com 使用 Javascript 多对多获取指针 ID 列表

javascript - 如何通过单击移动图层

ios - 在 iOS/Swift 中以编程方式设置 View 后 RevealViewController 不工作

ios - 按钮框架在运行时变化

cordova - 改变ios键盘方向?

jquery-mobile - 哪种框架最适合使用数据库连接开发移动应用程序?

javascript - 无法在 Template.onRendered() Meteor 上获取 div 的高度

javascript - 我在解释 Javascript 运算符的不等式时遇到一些问题

ios - Swift 的 AGPushNote 替代品?

javascript - 在 build.phonegap 中构建应用程序时,包含名称为phonegap.js 或 coredova.js 的文件