Window.name löst das Problem der domänenübergreifenden Datenübertragung

Window.name löst das Problem der domänenübergreifenden Datenübertragung
<br />Originaltext: http://research.microsoft.com/~helenw/papers/subspace.pdf
Die window.name-Übertragungstechnologie wurde ursprünglich von Thomas Frank erfunden, um einige Nachteile von Cookies zu lösen (4 x 20 KB-Limit für jeden Domänennamen, Daten können nur Zeichenfolgen sein, komplexe Syntax zum Setzen und Abrufen von Cookies usw.) (Einzelheiten finden Sie im Originaltext: „Sitzungsvariablen ohne Cookies“). Später verstärkte Kris Zyp die auf dieser Methode basierende window.name-Übertragung und führte sie in Dojo (dojox.io.windowName) ein, um das Problem der domänenübergreifenden Datenübertragung zu lösen.
Das Schöne an window.name: Der Namenswert bleibt nach dem Laden verschiedener Seiten (sogar verschiedener Domänen) erhalten und kann sehr lange Namenswerte (2 MB) unterstützen.
Die Grundprinzipien und Schritte der window.name-Übertragungstechnologie sind:

Name ist eine Eigenschaft des globalen/Fensterobjekts in der Browserumgebung, und wenn eine neue Seite im Frame geladen wird, bleibt der Eigenschaftswert von Name unverändert. Durch das Laden einer Ressource in einem Iframe legt die Zielseite das Namensattribut des Frames fest. Dieser Namensattributwert kann abgerufen werden, um auf die vom Webdienst gesendeten Informationen zuzugreifen. Das Namensattribut ist jedoch nur für Frames mit demselben Domänennamen zugänglich. Dies bedeutet, dass Sie zum Zugriff auf das Namensattribut nach dem Laden der Remote-Webdienstseite im Frame zurück zur ursprünglichen Domäne navigieren müssen. Die Same-Origin-Policy verhindert weiterhin, dass andere Frames auf das Namensattribut zugreifen. Sobald das Namensattribut erhalten ist, zerstören Sie den Rahmen.
Auf der obersten Ebene ist das Namensattribut unsicher und alle im Namensattribut festgelegten Informationen sind auf allen nachfolgenden Seiten verfügbar. Das Modul „windowName“ lädt Ressourcen jedoch immer in einem Iframe. Sobald die Daten abgerufen werden oder Sie zu einer neuen Seite auf der obersten Ebene navigieren, wird das Iframe zerstört, sodass andere Seiten niemals auf die Eigenschaft „window.name“ zugreifen können.
Der grundlegende Implementierungscode basiert auf YUI und ist aus dem von Kejun geschriebenen Beispiel abgeleitet:

(Funktion(){
var YUD = YAHOO.util.Dom, YUE = YAHOO.util.Event;
Datenanforderung = {
_doc: Dokument,
cfg: {
Proxy-URL: „proxy.html“
}
};
dataRequest.send = Funktion(sUrl, fnCallBack){
wenn(!sUrl || Typ von sUrl !== 'Zeichenfolge'){
zurückkehren;
}
sUrl = (sUrl.indexOf('?') > 0 ? '&' : '?') 'Fenstername=true';
var Frame = dieses._doc.createElement('iframe'), Status = 0, selbst = dieses;
dies._doc.body.appendChild(Rahmen);
Rahmen.Stil.Anzeige = "keine";
var löschen = Funktion(){
versuchen{
frame.contentWindow.document.write('');
Rahmen.Inhaltsfenster.schließen();
self._doc.body.removeChild(Rahmen);
}fang(e){}
};
var getData = Funktion(){
versuchen{
var da = frame.inhaltsfenster.name;
}fang(e){}
klar();
wenn(fnCallBack && Typ von fnCallBack === 'Funktion'){
fnCallBack(da);
}
};
YUE.on(Rahmen, 'laden', Funktion(){
wenn(Zustand === 1){
getData();
} sonst wenn(Zustand === 0){
Zustand = 1;
frame.contentWindow.location = self.cfg.proxyUrl;
}
});
Rahmen.src = sUrl;
};
})();

<<:  Analysieren Sie das Problem der Übertragung von Dateien und anderen Parametern in der Upload-Komponente von Element-UI

>>:  dh Filtersammlung

Artikel empfehlen

Implementierung von Portalen und Fehlergrenzbehandlung in React

Inhaltsverzeichnis Portale Fehlergrenzenbehandlun...

Einführung in die neuen Funktionen von ECMAscript

Inhaltsverzeichnis 1. Standardwerte für Funktions...

Detaillierte Erläuterung der Verwendung des Linux-Zeitbefehls

1. Befehlseinführung Mit „time“ werden die für di...

Implementierungscode für die nahtlose Verbindung des Div-Bildlaufbands

Code kopieren Der Code lautet wie folgt: <html...

Verschiedene Möglichkeiten zum Ändern der Hintergrundbildfarbe mit CSS3

CSS3 kann die Farbe von Bildern ändern. Ab sofort...

React+axios implementiert die Suchbenutzerfunktion von GitHub (Beispielcode)

laden Anforderung erfolgreich Anforderung fehlges...

So implementieren Sie Sveltes Defer Transition in Vue

Ich habe mir vor Kurzem Rich Harris‘ Video „Rethi...

So verwenden Sie crontab zum Hinzufügen geplanter Aufgaben in Linux

Vorwort Das Linux-System wird durch den Systemdie...

Lösung für den Fehler bei der Verbindung mit MySQL in Docker

Szenario: Nach der Installation der neuesten Vers...

So implementieren Sie einen variablen Ausdrucksselektor in Vue

Inhaltsverzeichnis Definieren der HTML-Struktur E...

Unterschied zwischen HTML ReadOnly und Enabled

Das Textfeld mit dem ReadOnly-Attribut wird auf de...

Vue implementiert einen visuellen Drag-Page-Editor

Inhaltsverzeichnis Drag & Drop-Implementierun...

Zusammenfassung der CSS-Schwebeelementanalyse

Float: links/rechts/keine; 1. Gleichstufiges Schw...