无法在“URL”上执行“createObjectURL”:

IT技术 javascript createobject
2021-01-27 21:32:01

在 Safari 中显示以下错误。

无法在“URL”上执行“createObjectURL”:找不到与提供的签名匹配的函数。

我的代码是:

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); 
            }
       }           
   } 
} 
6个回答

当我将原始数据传递给createObjectURL

window.URL.createObjectURL(data)

它必须是一个BlobFile或者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


更新

过去,我们还可以createObjectURL()对 MediaStream 对象使用方法。这种用法已被规范和浏览器删除。
如果您需要将 MediaStream 设置为 HTMLMediaElement 的源,只需将MediaStream对象直接附加srcObjectHTMLMediaElement属性,例如<video>元素。

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

但是,如果您需要使用MediaSource,BlobFile,您仍然需要创建一个blob://URLURL.createObjectURL()并将其分配给HTMLMediaElement.src

在此处阅读更多详细信息:https : //developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject

@mimo 我使用相同的代码下载文件。但是正在下载两个文件。一个是正​​确的文件,另一个同名但失败状态的额外文件正在下载。你知道为什么会这样吗?
2021-03-25 21:32:01
我对这个评论感到困惑,在 MDN 中它不鼓励使用URL.createObjectURL()媒体流。但是,它没有声明不要将它用于初始问题中所述的文件输入。
2021-04-05 21:32:01
嗨.. 如果我正在处理“应用程序/pdf”怎么办?当我处理 PDF 文件时,我在控制台上遇到了同样的错误
2021-04-07 21:32:01

这个错误是因为createObjectURL谷歌浏览器不推荐使用该功能

我改变了这个:

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

对此:

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

这对我有用。

2021-03-16 21:32:01
@user889030 这只是意味着您无法打开网页并期望网络摄像头流开始。您必须让用户明确启动流。只需使用一个按钮即可开始直播
2021-03-24 21:32:01
还有一个问题 video.play() 似乎受到限制:DOMException: play() 只能由用户手势启动。
2021-03-25 21:32:01
这应该是答案。
2021-03-27 21:32:01
createObjectURL 没有被弃用,如下所示但不再接受媒体流对象
2021-04-12 21:32:01

我的代码被破坏了,因为我使用了不推荐使用的技术。以前是这样的:

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

然后我用这个替换了它:

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

那效果很好。

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

video.srcObject = new MediaStream();

参考:

  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. 现代技术:https : //developer.mozilla.org/en-US/docs/Web/API/MediaStream

回退视频:

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

来自:https : //developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject

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

文档

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