无法执行' createObjectURL'在' URL':

时间:2014-11-25 07:14:54

标签: javascript createobject

在Safari中显示以下错误。

Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.

我的代码是:

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); 
              } }           
            } } 

9 个答案:

答案 0 :(得分:95)

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

window.URL.createObjectURL(data)

必须是BlobFileMediaSource对象,而不是数据本身。这对我有用:

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

答案 1 :(得分:82)

此错误是由于Google Chrome浏览器不推荐使用功能createObjectURL

我更改了此内容

video.src=vendorUrl.createObjectURL(stream);
video.play();

对此:

video.srcObject=stream;
video.play();

这对我有用。

答案 2 :(得分:8)

我的代码已损坏,因为我使用的是已弃用的东西。曾经是这样的:

video.src = window.URL.createObjectURL(localMediaStream);
video.play();

然后我用这个替换它:

video.srcObject = localMediaStream;
video.play();

效果很好。

参考文献:

  1. 不推荐使用的技术:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. 现代技术:https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject

答案 3 :(得分:7)

我对MediaStream遇到相同的错误。解决方案是将流设置为srcObject。

来自docs

  

重要提示:如果您仍有依赖createObjectURL()的代码来   将流附加到媒体元素,您需要将代码更新为   只需将srcObject直接设置为MediaStream。

答案 4 :(得分:3)

后退视频:

try {
  video.srcObject = mediaSource;
} catch (error) {
  video.src = URL.createObjectURL(mediaSource);
}
video.play();

发件人: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject

答案 5 :(得分:2)

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

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);
    ...
}

然后在浏览器尝试执行时发生错误,例如:

{{1}}

我建议基于以下代码实现:

{{1}}

我希望这可以帮助别人。

问候!

答案 6 :(得分:1)

如果您使用的是Ajax,则可以添加选项xhrFields: { responseType: 'blob' }

$.ajax({
  url: 'yourURL',
  type: 'POST',
  data: yourData,
  xhrFields: { responseType: 'blob' },
  success: function (data, textStatus, jqXHR) {
    let src = window.URL.createObjectURL(data);
  }
});

答案 7 :(得分:0)

如果您使用 angular,本教程会有所帮助:link。但是,您需要替换此行:

this.video.src = window.URL.createObjectURL(stream);

有了这个,因为 createObjectURL() 在 chrome 上被弃用了 MediaStream。

this.video.srcObject = stream;

答案 8 :(得分:-4)

我修复了从GgitHub下载最新版本的问题 GitHub url