Fehler beim Ausführen von 'createObjectURL' unter 'URL':


131

Anzeige unten Fehler in Safari.

Fehler beim Ausführen von 'createObjectURL' unter 'URL': Es wurde keine Funktion gefunden, die mit der angegebenen Signatur übereinstimmt.

Mein Code lautet:

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

Dies ist mein Code für Bild:

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
Hallo Hardik, was übergibst du an deine createObjectURL(...)Funktion, wenn du diesen Fehler bekommst?
Arthur Weborg

2
Objekt muss ein Dateiobjekt oder ein Blob-Objekt sein, um eine Objekt-URL für zu erstellen. Siehe devdocs.io/dom/window.url.createobjecturl
yxf

1
Dies ist mein Code für das Bild: function myUploadOnChangeFunction () {if (this.files.length) {für (var i in this.files) {if (this.files.hasOwnProperty (i)) {var src = createObjectURL (this. Dateien [i]); var image = neues Bild (); image.src = src; imagSRC = src; $ ('# img'). attr ('src', src); }}}}
Hardik Mandankaa

@HardikMansaraa Mach weiter und bearbeite das in deiner Frage.
Saktinpk

window.URL.createObjectURL('broken')wirft einen Fehler:Uncaught TypeError: Failed to execute 'createObjectURL' on 'URL': No function was found that matched the signature provided.
Juan Mendes

Antworten:


150

AKTUALISIEREN

Vermeiden Sie createObjectURL()Methoden, während Browser die Unterstützung dafür deaktivieren. Hängen Sie das MediaStreamObjekt einfach direkt an die srcObjectEigenschaft von HTMLMediaElementeg <video>element an.

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

Wenn Sie jedoch müssen die Arbeit mit MediaSource, Bloboder Filemüssen Sie mit einer URL erstellen URL.createObjectURL()und zuweisen zu HTMLMediaElement.src.

Weitere Informationen finden Sie hier: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject


Ältere Antwort

Beim Übergeben an createObjectURLRohdaten trat der gleiche Fehler auf :

window.URL.createObjectURL(data)

Es muss sein Blob, Fileoder MediaSourceObjekt, die Daten nicht selbst. Das hat bei mir funktioniert:

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

Weitere Informationen finden Sie auch im MDN: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL


2
Hallo .. Was tun, wenn ich es mit "application / pdf" zu tun habe? Ich erhalte den gleichen Fehler auf der Konsole, wenn ich mit PDF-Datei zu tun habe
N Sharma

@mimo Ich verwende denselben Code zum Herunterladen der Datei. Es werden jedoch zwei Dateien heruntergeladen. Eine ist die richtige Datei und eine zusätzliche Datei mit demselben Namen, aber der Status "Fehlgeschlagen" wird heruntergeladen. Haben Sie eine Idee, warum es passiert?
Shardul

Ich bin mit diesem Kommentar verwechselt, in MDN wird von der Verwendung URL.createObjectURL()für Medienströme abgeraten . Es wird jedoch nicht angegeben, dass es NICHT für eine Dateieingabe verwendet werden soll, wie in der ursprünglichen Frage angegeben.
Alextrastero

139

Dieser Fehler wird verursacht, weil die Funktion createObjectURLfür Google Chrome veraltet ist

Ich habe das geändert:

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

dazu:

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

Das hat bei mir funktioniert.



createObjectURL ist nicht wie hier gezeigt veraltet, akzeptiert aber kein Media-Stream-Objekt mehr
goodies4uall

Dies sollte die Antwort sein.
DomingoR

Es gibt noch ein anderes Problem. video.play () scheint eingeschränkt zu sein: DOMException: play () kann nur durch eine Benutzergeste initiiert werden.
user889030

@ user889030 Das bedeutet nur, dass Sie keine Webseite öffnen können und erwarten, dass der Webcam-Stream startet. Sie müssen den Benutzer den Stream explizit starten lassen. Verwenden Sie einfach eine Schaltfläche, um den Stream zu starten
S.Ramjit

26

Mein Code war fehlerhaft, weil ich eine veraltete Technik verwendet habe. Früher war es das:

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

Dann habe ich das durch folgendes ersetzt:

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

Das hat wunderbar funktioniert.

EDIT: Vor kurzem localMediaStreamwurde veraltet und ersetzt durch MediaStream. Der neueste Code sieht folgendermaßen aus:

video.srcObject = MediaStream;

Verweise:

  1. Veraltete Technik: https://developer.mozilla.org/en-US/docs/Web/API/URL/createObjectURL
  2. Moderne veraltete Technik: https://developer.mozilla.org/en-US/docs/Web/API/HTMLMediaElement/srcObject
  3. Moderne Technik: https://developer.mozilla.org/en-US/docs/Web/API/MediaStream

9

Ich hatte den gleichen Fehler für den MediaStream. Die Lösung setzt einen Stream auf das srcObject.

Aus den Dokumenten :

Wichtig: Wenn Sie noch Code haben, der auf createObjectURL () basiert, um Streams an Medienelemente anzuhängen, müssen Sie Ihren Code aktualisieren, um srcObject einfach direkt auf MediaStream zu setzen.



3

Das Problem ist, dass die in der Schleife bereitgestellten Schlüssel nicht auf den Index der Datei verweisen.

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

Die Ausgabe des obigen Codes lautet:

0
length
item

Aber was erwartet wurde war:

0
1
2
etc...

Der Fehler tritt dann auf, wenn der Browser versucht, Folgendes auszuführen: Beispiel:

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

Ich schlage eine Implementierung vor, die auf dem folgenden Code basiert:

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

Ich hoffe das kann jemandem helfen.

Schöne Grüße!


1

Wenn Sie Ajax verwenden, können Sie folgende Optionen hinzufügen xhrFields: { responseType: 'blob' }:

$.ajax({
  url: 'yourURL',
  type: 'POST',
  data: yourData,
  xhrFields: { responseType: 'blob' },
  success: function (data, textStatus, jqXHR) {
    let src = window.URL.createObjectURL(data);
  }
});

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.