cdvfile不支持的URL错误://

Amr*_*uta 7 ios cordova wkwebview cordova-plugin-file

问题:

在我的应用程序中,我想通过cordova wkwebview访问图像.HTML元素如下所示.

<img src="cdvfile://localhost/library-nosync/MyFolder/file.jpg">
Run Code Online (Sandbox Code Playgroud)

在加载时,我收到错误"无法加载资源:不支持的URL".我正在使用iOS 10.2.

经验证/尝试的事情:

如果选中"myFolder"文件夹下"cordova.file.dataDirectory"中的文件列表,我确实会看到"file.jpg".它的原生URL为file:///var/mobile/Containers/Data/Application/app_id/Library/NoCloud/MyFolder/file.jpg.

我在Content-Security-Policy中添加了"img-src'self'cdvfile:".

我在config.xml中添加了以下内容

<access origin="cdvfile://*" /> 
<allow-navigation href="cdvfile://*" /> 
<allow-intent href="cdvfile://*" />
<preference name="iosPersistentFileLocation" value="Compatibility" />
<preference name="iosExtraFilesystems" value="library,library-nosync,documents,documents-nosync,cache,bundle,root" />
Run Code Online (Sandbox Code Playgroud)

URL中没有特殊(非ASCII)字符,如与此错误相关的线程中所述.还有什么可能是"不支持的URL"的原因?

我访问cdvfile://路径的方式是不正确的?

更新

我遇到了一个链接(忘了捕获),说webview需要相对路径,因此cdvfile://不起作用.我尝试将图像源更改为相对路径,将其更改为"../../../../../../../../..//var/mobile/Containers/数据/应用程序/ app-id/Library/NoCloud/MyFolder/file.jpg"我现在可以看到一个新错误 - "无法加载资源:操作无法完成.操作不允许"

我可以通过"读取"文件的内容并将该base64数据作为图像源传递来使图像工作.但那应该是怎么回事,不是吗?

Lin*_*eep 5

如果您使用最新的 ios 平台 (cordova-ios@6.xx),您可以使用方案和主机名选项:

<preference name="scheme" value="app" />
<preference name="hostname" value="localhost" />
Run Code Online (Sandbox Code Playgroud)

那么你应该获取并使用schemeUrl ( app://) 而不是cdvfile://or file://url。

var cdvfileUrl = "cdvfile://localhost/library-nosync/MyFolder/file.jpg";

// Convert to native url
window.resolveLocalFileSystemURL(cdvfileUrl, function(entry) {
    var nativeUrl = entry.toNativeURL(); // will be "file://...."

    // Use nativeUrl to get scheme friendly url
    var schemeUrl = window.WkWebView.convertFilePath(nativeUrl);  // Will be "app://..."
});

Run Code Online (Sandbox Code Playgroud)

你可以在你的<img>src 标签中使用这个 schemeUrl 。

  • 我收到了“toNativeURL”的弃用警告,但只有“toURL”对我有用,谢谢 (2认同)

Pet*_*nar 1

如果您使用 WKWebView,则只能选择设置本地 http Web 服务器,然后通过http://localhost ...访问它

不幸的是“cdvfile”不适用于 WKWebView。