web-dev-qa-db-ja.com

「URL」で「createObjectURL」の実行に失敗しました:

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

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

96
mimo

このエラーは、関数createObjectURLがGoogle Chromeで廃止されたために発生します

これを変更しました:

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

これに:

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

これは私のために働いた。

85
Christian

非推奨のものを使用していたため、コードが壊れていました。以前はこれでした:

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
13
Dani Amsalem

MediaStreamでも同じエラーが発生しました。ソリューションは、srcObjectにストリームを設定します。

docs から:

重要:ストリームをメディア要素に添付するためにcreateObjectURL()に依存するコードがまだある場合は、srcObjectをMediaStreamに直接設定するようにコードを更新する必要があります。

7
max.kovpak

フォールバック付きのビデオ:

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

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

4
eddyparkinson

問題は、ループで提供されるキーがファイルのインデックスを参照しないことです。

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

これが誰かを助けることを願っています。

ご挨拶!

2
Hiago Takaki