未能在'URL'上执行'createObjectURL':

2022-08-30 01:10:40

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

答案 1

当我将原始数据传递给时,我遇到了相同的错误: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


更新

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

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

但是,如果需要使用 或 ,您仍然必须创建一个 URL 并将其分配给 。MediaSourceBlobFileblob://URL.createObjectURL()HTMLMediaElement.src

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


答案 2

导致此错误的原因是该函数不再接受谷歌浏览器的媒体流对象createObjectURL

我改变了这个:

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

对此:

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

这对我有用。