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



编辑:当我尝试已经尝试过的相同解决方案时,我使用了"cordova.file/documentsDirectory";,这一定是我上周错过的东西

原始问题:

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

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

我已经在Xcode中的iPhone 5s(iOS 12.5.4)设备、iPhone 8(iOS 14.5)模拟器、iPhone 11(iOS 14.5cordova.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);

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

我尝试过的

  • 我试图从tempDirectory或applicationStorageDirectory+'Documents/'(documentsDirectory)更改为Cordova File Plugin官方文档中列出的每个目录,但没有任何更改。

  • 尝试过用"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://";以及";文件://";并将其转换为window.WkWebView.convertFilePath([your file path]);

  • 尝试安装cordova插件uiwebview引擎,因为如果我正确理解,它可以访问应用程序之外的文件

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

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

没有成功。

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

  • 添加";间隙:";以及";cdvfile:";在我的元CSP标签中,没有任何变化

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

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

提前感谢!

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

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

这个问题是通过使用WkWebView.convertFilePath(cordova.file.dataDirectory+myfile),并将模式和主机名首选项添加到config.xml

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

编辑:示例用法

if(deviceType == 'ios'){
var localURL = window.WkWebView.convertFilePath(cordova.file.dataDirectory+"myfile.jpg");
}else{
var localURL = cordova.file.dataDirectory+"myfile.jpg";
}
return "<img src=""+localURL+"">";

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

相关内容

  • 没有找到相关文章

最新更新