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

Har*_*kaa 103 javascript createobject

在Safari中显示以下错误.

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}
Run Code Online (Sandbox Code Playgroud)

我的代码是:

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); 
            }
       }           
   } 
} 
Run Code Online (Sandbox Code Playgroud)

这是我的图片代码:

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}
Run Code Online (Sandbox Code Playgroud)

mim*_*imo 108

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

const mediaStream = new MediaStream();
const video = document.getElementById('video-player');
video.srcObject = mediaStream;
Run Code Online (Sandbox Code Playgroud)

它必须是MediaStream,srcObjectHTMLMediaElement对象,而不是数据本身.这对我有用:

window.URL.createObjectURL(data)
Run Code Online (Sandbox Code Playgroud)

另请查看MDN以获取更多信息:https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

  • 嗨..如果我正在处理“ application / pdf”怎么办?处理PDF文件时,在控制台上出现相同的错误 (2认同)

小智 108

导致此错误的原因createObjectURL是Google Chrome不推荐使用此功能

我改变了这个:

video.src=vendorUrl.createObjectURL(stream);
video.play();
Run Code Online (Sandbox Code Playgroud)

对此:

video.srcObject=stream;
video.play();
Run Code Online (Sandbox Code Playgroud)

这对我有用.

  • 如[此处](https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL#Browser_compatibility)所示,createObjectURL并未被弃用,但不再接受媒体流对象 (7认同)

Dan*_*lem 22

我的代码被破坏,因为我使用的是过时的技术。过去是这样的:

video.src = window.URL.createObjectURL(localMediaStream);
video.play();
Run Code Online (Sandbox Code Playgroud)

然后我将其替换为:

video.srcObject = localMediaStream;
video.play();
Run Code Online (Sandbox Code Playgroud)

效果很好。

编辑:最近localMediaStream已被弃用并替换为MediaStream。最新的代码如下所示:

video.srcObject = MediaStream;
Run Code Online (Sandbox Code Playgroud)

参考文献:

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


小智 9

我对MediaStream有同样的错误.解决方案是为srcObject设置流.

来自文档:

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


edd*_*son 8

后退视频:

try {
  video.srcObject = mediaSource;
} catch (error) {
  video.src = URL.createObjectURL(mediaSource);
}
video.play();
Run Code Online (Sandbox Code Playgroud)

来自:https : //developer.mozilla.org/zh-CN/docs/Web/API/HTMLMediaElement/srcObject


小智 5

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

for (var i in this.files) {
    console.log(i);
}
Run Code Online (Sandbox Code Playgroud)

上述代码的输出是:

0
length
item
Run Code Online (Sandbox Code Playgroud)

但预期的是:

0
1
2
etc...
Run Code Online (Sandbox Code Playgroud)

那么当浏览器尝试执行时就会出现错误,例如:

window.URL.createObjectURL(this.files["length"])
Run Code Online (Sandbox Code Playgroud)

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

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

我希望这可以帮助别人。

问候!