Signatur
Beschreibung
Die Eigenschaft crossOrigin spiegelt das HTML-Attribut crossorigin eines <img>-Elements wider. Sie legt fest, ob das Bild als CORS-Anfrage geladen wird und ob der Browser dabei Anmeldedaten wie Cookies, HTTP-Authentifizierung oder Client-Zertifikate mitsendet.
Das ist vor allem dann wichtig, wenn Sie ein Bild von einer fremden Origin auf ein <canvas> zeichnen und danach die Pixeldaten auslesen wollen, etwa mit getImageData(), toDataURL() oder toBlob(), oder wenn Sie es als WebGL-Textur verwenden. Ohne CORS gilt das Canvas als „tainted“ (verunreinigt), und solche Lesezugriffe lösen einen SecurityError aus.
Mögliche Werte:
"anonymous": CORS-Anfrage ohne Anmeldedaten (Credentials-Modussame-origin). Jeder ungültige Wert und die leere Zeichenkette werden ebenfalls als"anonymous"behandelt."use-credentials": CORS-Anfrage mit Anmeldedaten. Der Server muss dannAccess-Control-Allow-Credentials: trueund eine konkrete Origin (nicht*) inAccess-Control-Allow-Originsenden.null: Das Attribut fehlt. Dann gibt es keine CORS-Anfrage, sondern einen normalenno-cors-Abruf.
Setzen Sie crossOrigin vor src. Ist das Laden schon gestartet, gilt die Einstellung erst beim nächsten Laden des Bildes.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $value | string | null | null | Beim Setzen: "anonymous", "use-credentials" oder null. Mit null wird das Attribut crossorigin entfernt. |
Rückgabewert
"anonymous" oder "use-credentials", oder null, wenn das Attribut fehlt. Ungültige Werte werden beim Lesen als "anonymous" zurückgegeben.Beispiele
Fremdes Bild CORS-fähig laden und auf Canvas auslesen
const img = new Image();
// Wichtig: crossOrigin VOR src setzen
img.crossOrigin = 'anonymous';
img.src = 'https://cdn.example.com/foto.jpg';
img.addEventListener('load', () => {
const canvas = document.createElement('canvas');
canvas.width = img.naturalWidth;
canvas.height = img.naturalHeight;
const ctx = canvas.getContext('2d');
ctx.drawImage(img, 0, 0);
// Funktioniert nur, wenn der Server CORS-Header sendet
const [r, g, b] = ctx.getImageData(0, 0, 1, 1).data;
console.log(`Pixel oben links: rgb(${r}, ${g}, ${b})`);
});
img.addEventListener('error', () => {
console.error('Bild konnte nicht (CORS-konform) geladen werden');
});
Wert lesen und Normalisierung prüfen
const img = document.createElement('img');
console.log(img.crossOrigin); // Attribut fehlt
img.crossOrigin = 'use-credentials';
console.log(img.crossOrigin);
img.crossOrigin = 'irgendwas'; // ungültiger Wert
console.log(img.crossOrigin);
console.log(img.getAttribute('crossorigin'));
img.crossOrigin = null; // Attribut entfernen
console.log(img.hasAttribute('crossorigin'));
Promise-Helfer für CORS-Bilder (z. B. für WebGL-Texturen)
const loadCorsImage = (url, withCredentials = false) =>
new Promise((resolve, reject) => {
const img = new Image();
img.crossOrigin = withCredentials ? 'use-credentials' : 'anonymous';
img.onload = () => resolve(img);
img.onerror = () => reject(new Error(`Laden fehlgeschlagen: ${url}`));
img.src = url;
});
const main = async () => {
try {
const img = await loadCorsImage('https://assets.example.com/textur.png');
const blob = await new Promise((res) => {
const c = document.createElement('canvas');
c.width = img.naturalWidth;
c.height = img.naturalHeight;
c.getContext('2d').drawImage(img, 0, 0);
c.toBlob(res, 'image/png');
});
console.log('Blob-Größe:', blob.size);
} catch (err) {
console.error(err.message);
}
};
main();
// Wichtig · Fallstricke
- Reihenfolge:
crossOriginmuss vorsrcbzw.srcsetgesetzt werden. Sonst startet der Abruf ohne CORS, und das Canvas wird trotzdem „tainted“. - Server-Header nötig: Sendet der Server kein passendes
Access-Control-Allow-Origin, wird das Bild bei gesetztemcrossOrigingar nicht angezeigt, und es feuert das Ereigniserror. Ohne das Attribut würde das Bild zwar angezeigt, wäre aber nicht auslesbar. - Cache-Falle: Wurde dasselbe Bild vorher ohne CORS geladen (z. B. durch ein anderes
<img>), kann eine zwischengespeicherte Antwort ohne CORS-Header zu Fehlern führen. Abhilfe: Der Server sendetVary: Origin, oder Sie hängen einen Cache-Buster an die URL. - use-credentials: Die Wildcard
Access-Control-Allow-Origin: *ist dann nicht erlaubt, und der Server mussAccess-Control-Allow-Credentials: truesenden. Aus Sicherheitsgründen nur verwenden, wenn wirklich Cookies bzw. Anmeldedaten nötig sind. - Sicherheit: Die Canvas-Sperre („tainting“) verhindert, dass Skripte fremde Bildinhalte auslesen, die zum Beispiel private, per Cookie geschützte Daten enthalten können.
crossOriginhebt diese Sperre nur auf, wenn der fremde Server per CORS ausdrücklich zustimmt. - Kompatibilität: Wird von allen modernen Browsern unterstützt. Bei
data:- undblob:-URLs derselben Origin ist die Eigenschaft wirkungslos.