对'URL'执行'createObjectURL'时失败:

在Safari浏览器中显示下面的错误。

Failed to execute 'createObjectURL'on 'URL':没有找到与提供的签名相匹配的函数。

我的代码是:

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}

这是我的图像代码:

function myUploadOnChangeFunction() { 
    if (this.files.length) { 
       for (var i in this.files) { 
           if (this.files.hasOwnProperty(i)) { 
              var src = createObjectURL(this.files[i]); 
              var image = new Image(); 
              image.src = src; 
              imagSRC = src; 
              $('#img').attr('src', src); 
            }
       }           
   } 
} 
解决办法

更新

考虑避免使用createObjectURL()方法,因为浏览器正在禁用对它的支持。只需将MediaStream对象直接附加到HTMLMediaElementsrcObject属性上,例如<amp-video>元素。

const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;

然而,如果你需要使用MediaSource'、Blob'或File',你必须用URL.createObjectURL()'创建一个URL,并将其分配给HTMLMediaElement.src

在这里阅读更多细节:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject


以前的答案

我遇到了同样的错误,当我传递给createObjectURL原始数据时:

window.URL.createObjectURL(data)

它必须是Blob'、File'或`MediaSource'对象,而不是数据本身。这对我来说是有效的:

var binaryData = [];
binaryData.push(data);
window.URL.createObjectURL(new Blob(binaryData, {type: "application/zip"}))

也可以在MDN上查看更多信息:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

评论(2)

我对MediaStream也有同样的错误。解决办法是给srcObject设置一个流。

来自文档

重要:如果你的代码仍然依赖createObjectURL()来 将流附加到媒体元素上,你需要将你的代码更新为 简单地将srcObject直接设置为MediaStream。

评论(0)

问题是,在循环中提供的键并不是指文件的索引。

for (var i in this.files) {
    console.log(i);
}

上述代码的输出结果是:

0
length
item

但预期的是:

0
1
2
etc...

然后,当浏览器试图执行时,就会出现错误,比如说:

window.URL.createObjectURL(this.files["length"])

我建议根据以下代码来执行:

var files = this.files;
for (var i = 0; i < files.length; i++) {
    var file = files[i],
        src = (window.URL || window.webkitURL).createObjectURL(file);
    ...
}

我希望这能帮助到别人。

问候您!

评论(0)