当前位置: 首页 > 知识库问答 >
问题:

cdvfile不支持的URL错误://

朱阳晖
2023-03-14

问题:

在我的应用程序中,我想通过cordova wkwebview访问图像。超文本标记语言元素如下所示。

<img src="cdvfile://localhost/library-nosync/MyFolder/file.jpg">

加载时,我收到错误“加载资源失败:不支持的URL”。我正在使用iOS 10.2。

验证/尝试的事情:

如果选中文件夹“MyFolder”下的“cordova.file.dataDirectory”中存在的文件列表,我确实看到那里存在“file.jpg”。它的本机URL为文件:///var/mobile/Containers/Data/Application/app_id/Library/NoCloud/MyFolder/file.jpg.

我已将“img-src'Self'cdvfile:”添加到Content-Security-Policy。

我在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" />

URL 中没有与此错误相关的线程中提到的特殊(非 ASCII)字符。“不支持的URL”的原因可能是什么?

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

使现代化

我遇到了一个链接(忘记捕获它),说webview需要相对路径,因此cdvfile://不起作用。我试图通过将图像源更改为“.../.../.../.../.../.../.../.../.../.../.../.../...////var/mobile/Containers/Data/Application/app-id/Library/NoCloud/MyFolder/file.jpg”来将图像源更改为相对路径,现在我可以看到一个新的错误-“加载资源失败:操作无法完成。不允许操作”

我可以通过“读取”文件的内容并将base64数据作为图像源传递,使图像正常工作。但事实并非如此,对吗?

共有3个答案

尉迟京
2023-03-14

如果您使用的是WKWebView,您只能选择设置本地超文本传输协议Web服务器,然后通过http://localhost访问它...

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

缑兴贤
2023-03-14

为了将来参考,对于最新的WKWebView,直接设置src属性失败。

我发现加载图像的唯一方法是这样的:

    function loadImageFromFile(filename, imgElement) {
        // filename is cdvfile:....... (string)
        // imgElement is target IMG element name (string)
        window.resolveLocalFileSystemURL(filename, function success(fileEntry) {
            fileEntry.file(function (file) {
                var reader = new FileReader();
                reader.onloadend = function() {
                    if (reader.result) {
                        var elem = document.getElementById(imgElement);
                        var blob = new Blob([new Uint8Array(reader.result)], { type: "image/png" });
                        elem.src = window.URL.createObjectURL(blob);
                        window.URL.revokeObjectURL(blob);
                    }
                };
                reader.readAsArrayBuffer(file);
            });
        }, function () {
            console.log("File not found: ");
        });
    }
邓令雪
2023-03-14

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

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

然后您应该获取并使用SchemeUrl(app://)而不是cdvfile://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://..."
});

您可以使用此方案Url在你是你的

 类似资料:
  • 所以我在这篇文章中发现了错误。我尝试升级gradle,但在使用不受支持的gradle版本时出现了另一个错误,因此我返回到4.4.2版本。 现在,我知道这是另一个问题的重复,但这个问题仍然存在,并且在较新版本的gradle和idea中尚未解决。此外,我不想使用包装。 我收到的错误: Gradle版本:4.4.2 IntelliJ IDEA版本:2018.3.5 您可以在这里找到一个测试项目来重现该问

  • 我试图制作我的第一个应用程序(hello world),并在手机上运行它,但当我单击run时,gradle返回了这个错误(我在这里研究了stackoverflow并试图关闭即时运行,但在我的情况下似乎不起作用): 后来编辑2:我想通了,我的电脑上安装了一个旧的jdk版本和最新的android studio,谢谢你的帮助。我只需要安装最新的jdk版本(8)

  • 我正在使用python向elasticsearch插入一些数据,elasticsearch版本是 从日期时间导入 日期时间 从 Elasticsearch 导入 Elasticsearch es = Elasticsearch( “localhost:9200” ) 从 Elasticsearch 导入 传输错误数据 = { “http_code” : “404”, “计数” : “10” } t

  • 这是我的测试代码。但它无法运行。终端总是给我这个错误: 回溯(最后一次调用): 文件“desktop/test.py”,第28行,在loss=tf中。缩减平均值(tf.reduce\u和(tf.square(ys预测),缩减指数=[1]) 文件“/Users/sumeixu/anaconda3/lib/python3.6/site packages/tensorflow/python/ops/ma

  • 我有一个方法来计算< code > div 中元素的数量并返回它们的数目。 这是页面源代码 WebDriver引发以下错误:不支持复合类名。考虑搜索一个类名并过滤结果,或者使用CSS选择器。 编辑: 结果是< code>WerbDriver不支持类名中的空格,omg。 你们能帮我在这种情况下使用< code>CSS选择器来找到元素吗?

  • 当我试图用proguard混淆某个应用程序时,我总是会遇到这种错误 我已经更新了Proguard并检查了项目配置文件,但总是出现相同的错误。我正在使用Intellij IDEA的最新版本