JavaScript ist eine dynamische Skripttechnologie mit Front-End, die häufig in der Webentwicklung verwendet wird. In JavaScript gibt es eine sehr wichtige Sicherheitsbeschränkung als "gleichorientierte Richtlinie". Diese Strategie legt wichtige Einschränkungen für den Seiteninhalt auf, auf den JavaScript -Code zugreifen kann, dh JavaScript kann nur unter derselben Domäne wie das Dokument zugreifen, das sie enthält.
JavaScript ist eine Sicherheitsstrategie, die bei der Programmierung von Multi-Di-Frame- oder Multi-Windows und AJAX besonders wichtig ist. Nach dieser Strategie kann der in der Seite unter baidu.com enthaltene JavaScript -Code auf den Seiteninhalt unter dem Domänennamen von Google.com nicht zugreifen. Selbst Seiten zwischen verschiedenen Subdomänen können nicht über JavaScript -Code voneinander zugegriffen werden. Die Auswirkungen auf AJAX sind, dass AJAX -Anfragen, die über XMLHTTPREquest implementiert wurden, keine Anfragen an verschiedene Domänen senden können. Beispielsweise können Seiten unter ABC.Example.com AJAX -Anfragen nicht an Def.example.com usw. senden.
Bei der Durchführung einer eingehenden Front-End-Programmierung sind jedoch unweigerliche Cross-Domänen-Operationen erforderlich, und die "gleichorientierte Strategie" scheint zu anspruchsvoll zu sein. Dieser Artikel fasst einige der Technologien zusammen, die in diesem Thema in der gesamten Domäne erforderlich sind.
Im Folgenden diskutieren wir Cross-Domain-Technologien in zwei Situationen: Diskutieren Sie zuerst die Cross-Domain-Technologien in verschiedenen Subdomänen und diskutieren dann Cross-Domain-Technologien in völlig unterschiedlichen Domänen.
(I) Cross-Domänen-Technologie verschiedener Subdomänen.
Wir diskutieren es in zwei Fragen getrennt: Die erste Frage ist, wie JavaScript -Anrufe über verschiedene Subdomänen hinweg tätigen. Die zweite Frage ist, wie AJAX -Anfragen an verschiedene Subdomänen eingereicht werden können.
Lassen Sie uns zunächst das erste Problem lösen, vorausgesetzt, es gibt zwei verschiedene Subdomains unter der domäne example.com: abc.example.com und def.example.com. Nehmen wir nun an, es gibt eine Seite unter def.example.com, auf der eine JavaScript -Funktion definiert wird:
Die Codekopie lautet wie folgt:
Funktion funcIndef () {
.....
}
Wir möchten die obige Funktion auf einer Seite unter ABC.Example.com aufrufen. Nehmen wir an, dass die Seite unten abc.example.com, die wir diskutieren, in der folgenden Seite def.example.com in Form eines IFRame eingebettet ist. Daher können wir versuchen, die folgenden Anrufe im Iframe zu tätigen:
Die Codekopie lautet wie folgt:
window.top.funcindef ();
OK, wir haben festgestellt, dass dieser Anruf durch die zuvor erwähnte "gleichorientierte Richtlinie" verboten ist und die JavaScript-Engine direkt eine Ausnahme macht.
Um den oben genannten Anruf zu implementieren, können wir dies tun, indem wir das Domänenattribut der beiden Seiten ändern. Zum Beispiel können wir den folgenden JavaScript -Code -Snippet ganz oben auf beiden Seiten unter ABC.Example.com und def.example.com hinzufügen:
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
document.domain = "example.com";
</script>
Auf diese Weise werden die beiden Seiten zur gleichen Domäne, und die vorherigen Anrufe können normal ausgeführt werden.
Eine Sache, die hier zu beachten ist, ist, dass das Dokument.Domain-Eigenschaft einer Seite nur auf einen Domänennamen auf höchstem Niveau (mit Ausnahme des Domänennamens der ersten Ebene) festgelegt werden kann, aber nicht auf einen tieferen Subdomain-Namen als den aktuellen Domänennamen festgelegt werden kann. Beispielsweise kann die Seite von ABC.Example.com ihre Domain nur auf example.com festlegen, nicht auf sub.abc.example.com festgelegt werden und kann natürlich nicht auf Domainnamen erster Ebene eingestellt werden.
Das obige Beispiel diskutiert die Situation, in der zwei Seiten zu iframe verschachtelten Beziehungen gehören. Wenn die beiden Seiten offen und geöffnete Beziehungen sind, ist das Prinzip genau das gleiche.
Lassen Sie uns das zweite Problem lösen: So senden Sie AJAX -Anfragen an verschiedene Subdomänen.
Normalerweise verwenden wir Code ähnlich wie folgt, um ein XMLHTTPrequest -Objekt zu erstellen:
Die Codekopie lautet wie folgt:
Fabriken = [
function () {return New XmlHttpRequest (); },
function () {return New ActiveXObject ("msxml2.xmlhttp"); },
function () {return New ActiveXObject ("microsoft.xmlhttp"); }
];
Funktion newRequest () {
für (var i = 0; i <</span> factories.length; i ++) {
versuchen{
var factory = fabrik [i];
return factory ();
} catch (e) {}
}
null zurückkehren;
}
Der obige Code bezieht sich auf ActiveXObject für die Kompatibilität mit den Browsern der IE6 -Serie. Jedes Mal, wenn wir die NewRequest -Funktion aufrufen, erhalten wir ein AJAX -Objekt, das wir gerade erstellt haben, und verwenden dann dieses AJAX -Objekt, um eine HTTP -Anforderung zu senden. Beispielsweise sendet der folgende Code eine GET -Anfrage an ABC.EXABE.com:
Die Codekopie lautet wie folgt:
var request = newRequest ();
Request.open ("get", "http://abc.example.com");
request.send (null);
Unter der Annahme, dass der oben genannte Code in einer Seite unter dem Domänennamen von ABC.Example.com enthalten ist, kann die GET -Anfrage ohne Probleme normalerweise erfolgreich gesendet werden. Wenn Sie jedoch jetzt eine Anfrage an Def.example.com senden, gibt es ein Cross-Domain-Problem und die JavaScript-Engine leistet eine Ausnahme.
Die Lösung besteht darin, eine Cross-Domänen-Datei unter die Domäne def.example.com zu platzieren, vorausgesetzt, sie heißt Crossdomain.html. Verschieben Sie dann die Definition der vorherigen NewRequest-Funktion in diese Cross-Domänen-Datei. Fügen Sie schließlich wie die vorherige Praxis, das Dokument zu ändern.
Die Codekopie lautet wie folgt:
<script type = "text/javaScript">
document.domain = "example.com";
</script>
Um Cross-Domain-Dateien zu verwenden, haben wir ein verstecktes Iframe eingebettet, das auf Cross-Domain-Dateien in der Seite hinweist, in der AJAX unter der Domäne von ABC.Example.com aufgerufen wird, zum Beispiel:
[Code]
<iframe name = "xd_iframe" style = "display: keine" src = "http://def.example.com/crossdomain.html"> </iframe>
Zu diesem Zeitpunkt befinden sich die Seite unter der Domäne von ABC.Example.com und Crossdomain.html beide in derselben Domäne (Beispiel.com). Wir können die NewRequest -Funktion in Crossdomain.html auf der Seite unter der Domäne von ABC.Example.com aufrufen:
Die Codekopie lautet wie folgt:
var request = window.frames ["xd_iframe"]. newRequest ();
Das auf diese Weise erhaltene Anforderungsobjekt kann eine HTTP -Anforderung an http://def.example.com senden.
(Ii) Cross-Domänen-Technologie mit völlig unterschiedlichen Domänen.
Wenn die Domain-Namen der obersten Ebene unterschiedlich sind, beispielsweise, wenn Sie über JavaScript zwischen Beispiel1.com und Beispiel2.com mit dem Front-End kommunizieren möchten, ist die erforderliche Technologie komplizierter.
Bevor wir die Cross-Domain-Technologien verschiedener Bereiche erläutern, machen wir zunächst klar, dass die Technologie, über die wir unten sprechen möchten, auch für die vorherigen Situationen der Cross-Domäne anwendbar ist, da Cross-Domänen nur ein Sonderfall des Cross-Domain-Problems ist. Natürlich kann die Verwendung der richtigen Technologie unter den richtigen Umständen eine bessere Effizienz und höhere Stabilität gewährleisten.
Kurz gesagt, nach verschiedenen Cross-Domain-Bedürfnissen können Cross-Domain-Technologien in die folgenden Kategorien eingeteilt werden:
1. JSONP Cross-Domain Get Anfrage
2. Die Umsetzung der Domänen durch Iframe
3. Flash Cross-Domain HTTP-Anfrage
4. Fenster.PostMessage
Dieser Artikel endet hier zuerst. Wir werden die vier oben genannten Cross-Domain-Technologien ausführlich vorstellen. Wir werden es später präsentieren!