web-dev-qa-db-fra.com

Impossible d'exécuter 'createObjectURL' sur 'URL':

Afficher l'erreur ci-dessous dans Safari.

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

Mon code est:

function createObjectURL(object) {
    return (window.URL) ? window.URL.createObjectURL(object) : window.webkitURL.createObjectURL(object);
}

Ceci est mon code pour l'image: 

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); 
              } }           
            } } 
70
Hardik Mandankaa

J'ai rencontré la même erreur lorsque je suis passé à createObjectURL raw data:

window.URL.createObjectURL(data)

Il doit s'agir d'un objet Blob, File ou MediaSource et non de données. Cela a fonctionné pour moi:

var binaryData = [];
binaryData.Push(data);
window.URL.createObjectURL(new Blob(binaryData, {type: "application/Zip"}))

Consultez également le MDN pour plus d’informations: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL

83
mimo

Cette erreur est due au fait que la fonction createObjectURL est obsolète pour Google Chrome.

J'ai changé ceci:

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

pour ça:

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

Cela a fonctionné pour moi.

49
Christian

J'ai eu la même erreur pour le MediaStream. La solution définit un flux sur srcObject.

De la docs :

Important: Si vous avez toujours du code qui repose sur createObjectURL () à attacher des flux aux éléments de média, vous devez mettre à jour votre code pour Il suffit de définir srcObject sur MediaStream directement.

7
max.kovpak

Mon code était cassé parce que j'utilisais des logiciels obsolètes. C'était autrefois:

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

Ensuite, j'ai remplacé cela par ceci:

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

Cela a fonctionné à merveille.

Références:

  1. Technique obsolète: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. Technique moderne: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
6
Dani Amsalem

Le problème est que les clés fournies dans la boucle ne font pas référence à l'index du fichier.

for (var i in this.files) {
    console.log(i);
}

La sortie du code ci-dessus est:

0
length
item

Mais ce à quoi on s'attendait était:

0
1
2
etc...

Ensuite, l'erreur se produit lorsque le navigateur tente de s'exécuter, par exemple:

window.URL.createObjectURL(this.files["length"])

Je suggère une implémentation basée sur le code suivant:

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

J'espère que cela peut aider quelqu'un.

Salutations!

2
Hiago Takaki

Vidéo avec repli:

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

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

0
eddyparkinson