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数据作为图像源传递来使图像工作.但那应该是怎么回事,不是吗?
如果您使用最新的 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 。
归档时间: |
|
查看次数: |
2449 次 |
最近记录: |