Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Berechtigungen für Cross-Origin-Image-Ressourcen (CORS-fähiges Image)

Das HTML-Spezifikationsdokument führt das Crossorigin-Attribut für Bilder ein. Durch Festlegen der entsprechenden Header-Informationen CORS können img-Bilder von anderen Websites geladen und in Canvas verwendet werden, als ob sie direkt von der aktuellen Website (aktueller Ursprung) heruntergeladen worden wären.

Einzelheiten zur Verwendung des Crossorigin-Attributs finden Sie unter CORS-Einstellungsattribute.

Was ist „verunreinigte“ Leinwand?

Obwohl es möglich ist, Bilder in der Leinwand ohne CORS-Autorisierung zu verwenden, wird hierdurch die Leinwand beschädigt. Sobald die Leinwand verunreinigt ist, können Sie keine Daten mehr aus der Leinwand extrahieren, was bedeutet, dass Sie keine Methoden wie toBlob(), toDataURL() und getImageData() mehr aufrufen können, da sonst ein Sicherheitsfehler ausgegeben wird.

Dies dient dazu, die persönlichen Daten des Benutzers zu schützen und zu verhindern, dass Bildinformationen des Benutzers ohne Erlaubnis von Remote-Websites geladen werden, was zu einem Verstoß gegen die Privatsphäre führen würde.

(Anmerkung des Übersetzers: Wenn sich der Benutzer bei sozialen Netzwerken wie QQ angemeldet hat und kein Schutz besteht, kann es sein, dass die Website nach dem Öffnen einer bestimmten Website Canvas verwendet, um die Bildinformationen des Benutzers abzurufen und hochzuladen, was zu Datenlecks führt.)

Beispiel: Bild von anderer Site speichern

Zuerst muss der Bildserver den entsprechenden Access-Control-Allow-Origin Antwortheader setzen. Fügen Sie dem Anforderungsheader das crossOrigin-Attribut des img-Elements hinzu. Beispielsweise können Sie für den Apache-Server die Konfigurationsinformationen in HTML5 Boilerplate-Apache-Serverkonfigurationen kopieren, um zu antworten:

<IfModule mod_setenvif.c>
    <IfModule mod_headers.c>
    <FilesMatch "\.(cur|gif|ico|jpe?g|png|svgz?|webp)$">
        SetEnvIf Herkunft ":" IS_CORS
        Header-Satz Access-Control-Allow-Origin "*" env=IS_CORS
    </FilesMatch>
    </IfModule>
</IfModule> 

Wenn diese Einstellungen wirksam sind, können Sie Bilder von anderen Sites wie Ihre eigenen Ressourcen im DOM-Speicher (oder anderswo) speichern.

var img = neues Bild,
    Leinwand = Dokument.createElement("Leinwand"),
    ctx = canvas.getContext("2d"),
    src = "http://example.com/image"; // Spezifische Bildadresse img.crossOrigin = "Anonymous";

img.onload = Funktion() {
    Leinwand.Breite = Bild.Breite;
    Leinwandhöhe = Bildhöhe;
    ctx.drawImage(Bild, 0, 0);
    localStorage.setItem( "savedImageData", canvas.toDataURL("image/png") );
}
img.src = Quelle;
// Stellen Sie sicher, dass zwischengespeicherte Bilder auch das Ladeereignis auslösen, wenn ( img.complete || img.complete === undefined ) {
    img.src = "data:image/gif;base64,R0lGODlhAQABAIAAAAAAAP///ywAAAAAAQABAAACAUwAOw==";
    img.src = Quelle;
}

Browserkompatibilität

Desktop

Besonderheit Chrom Firefox (Gecko) Internet Explorer Oper Safari
Grundlegende Unterstützung 13 8 Keine Unterstützung Keine Unterstützung ?

Mobile

Besonderheit Android Firefox Mobile (Gecko) IE Mobile Opera Mobile Safari Mobile
Grundlegende Unterstützung ? ? ? ? ?

Siehe auch

Chrome: Verwenden von Cross-Origin-Bildern in WebGL

HTML-Spezifikation - Crossorigin-Attribut

Das Obige ist der vollständige Inhalt dieses Artikels. Ich hoffe, er wird für jedermanns Studium hilfreich sein. Ich hoffe auch, dass jeder 123WORDPRESS.COM unterstützen wird.

<<:  Detaillierte Erklärung des Unterschieds zwischen dem JavaScript-Spread-Operator und dem Rest-Operator

>>:  Detailliertes Beispiel zum Einfügen benutzerdefinierter HTML-Datensätze im Quill-Editor

Artikel empfehlen

MySQL-String-Aufteilungsvorgang (String-Abfangen mit Trennzeichen)

String-Extraktion ohne Trennzeichen Fragenanforde...

Einführung und Verwendung der Angular-Pipeline PIPE

Vorwort PIPE, übersetzt als Pipeline. Angular Pip...

Verschachtelte Anzeigeimplementierung der Vue-Router-Ansicht

Inhaltsverzeichnis 1. Routing-Konfiguration 2. Vu...

js realisiert das dynamische Laden von Daten durch Wasserfallfluss

In diesem Artikel erfahren Sie den spezifischen C...

JavaScript implementiert den Front-End-Countdown-Effekt

In diesem Artikel wird der spezifische JavaScript...

Zusammenfassung der in MySQL häufig verwendeten Verkettungsanweisungen

Vorwort: In MySQL wird die Funktion CONCAT() verw...

So verwenden Sie Nginx, um domänenübergreifende Front-End-Probleme zu lösen

Vorwort Bei der Entwicklung statischer Seiten, wi...

Installationsprozess von Zabbix-Agent auf Kylin V10

1. Laden Sie das Installationspaket herunter Down...

SQL-Implementierung von LeetCode (178. Punkterangliste)

[LeetCode] 178.Ranglistenergebnisse Schreiben Sie...

Detaillierte Erläuterung des Datenproxys und der Ereignisse von VUE

Inhaltsverzeichnis Überprüfung der Object.defineP...