Die document.domain
Methode
Beachten Sie, dass dies eine iframe-Methode ist, die den Wert von document.domain auf ein Suffix der aktuellen Domäne setzt. In diesem Fall wird die kürzere Domain für nachfolgende Ursprungsprüfungen verwendet. Angenommen, ein Skript im Dokument bei http://store.company.com/dir/other.html
führt die folgende Anweisung aus:
document.domain = "company.com";
Nachdem diese Anweisung ausgeführt wurde, besteht die Seite die Ursprungsprüfung mit http://company.com/dir/page.html
. Doch durch die gleiche Argumentation, company.com konnte nicht gesetzt document.domain
zuothercompany.com
.
Mit dieser Methode können Sie Javascript von einem Iframe ausführen, der in einer Subdomain auf einer Seite in der Hauptdomain gespeichert ist. Diese Methode eignet sich nicht für domänenübergreifende Ressourcen, da Sie in Browsern wie Firefox keine Änderungen vornehmen könnendocument.domain
in eine völlig fremde Domain .
Quelle: https://developer.mozilla.org/en/Same_origin_policy_for_JavaScript
Die Methode zur gemeinsamen Nutzung von Ressourcen zwischen verschiedenen Ursprüngen
Cross-Origin Resource Sharing (CORS) ist ein W3C-Arbeitsentwurf, der definiert, wie Browser und Server beim Zugriff auf Quellen über Ursprünge hinweg kommunizieren müssen. Die Grundidee von CORS besteht darin, benutzerdefinierte HTTP-Header zu verwenden, damit sowohl der Browser als auch der Server genug voneinander wissen, um festzustellen, ob die Anforderung oder Antwort erfolgreich sein oder fehlschlagen sollte.
Für eine einfache Anfrage, die entweder GET
oder POST
ohne benutzerdefinierte Header verwendet und deren Hauptteil ist text/plain
, wird die Anfrage mit einem zusätzlichen Header namens aufgerufen Origin
. Der Origin-Header enthält den Ursprung (Protokoll, Domänenname und Port) der anfordernden Seite, sodass der Server leicht bestimmen kann, ob eine Antwort bereitgestellt werden soll oder nicht. Ein Beispielheader Origin
könnte folgendermaßen aussehen:
Origin: http://www.stackoverflow.com
Wenn der Server entscheidet, dass die Anforderung zulässig sein soll, sendet er einen Access-Control-Allow-Origin
Header, der denselben Ursprung wiedergibt, der gesendet wurde, oder *
wenn es sich um eine öffentliche Ressource handelt. Beispielsweise:
Access-Control-Allow-Origin: http://www.stackoverflow.com
Wenn dieser Header fehlt oder die Ursprünge nicht übereinstimmen, lässt der Browser die Anforderung nicht zu. Wenn alles in Ordnung ist, verarbeitet der Browser die Anfrage. Beachten Sie, dass weder die Anfragen noch die Antworten Cookie-Informationen enthalten.
Das Mozilla-Team schlägt in seinem Beitrag zu CORS vor , das Vorhandensein der withCredentials
Eigenschaft zu überprüfen, um festzustellen, ob der Browser CORS über XHR unterstützt. Sie können dann mit der Existenz des XDomainRequest
Objekts koppeln , um alle Browser abzudecken:
function createCORSRequest(method, url){
var xhr = new XMLHttpRequest();
if ("withCredentials" in xhr){
xhr.open(method, url, true);
} else if (typeof XDomainRequest != "undefined"){
xhr = new XDomainRequest();
xhr.open(method, url);
} else {
xhr = null;
}
return xhr;
}
var request = createCORSRequest("get", "http://www.stackoverflow.com/");
if (request){
request.onload = function() {
// ...
};
request.onreadystatechange = handler;
request.send();
}
Beachten Sie, dass Sie für die Funktion der CORS-Methode Zugriff auf alle Arten von Server-Header-Mechanismen haben müssen und nicht einfach auf Ressourcen von Drittanbietern zugreifen können.
Quelle: http://www.nczonline.net/blog/2010/05/25/cross-domain-ajax-with-cross-origin-resource-sharing/
Die window.postMessage
Methode
window.postMessage
Wenn ein Aufruf ausgeführt wird, wird a MessageEvent
im Zielfenster ausgelöst, wenn ein ausstehendes Skript abgeschlossen ist, das ausgeführt werden muss (z. B. verbleibende Ereignishandler, wenn window.postMessage
sie von einem Ereignishandler aufgerufen werden, zuvor festgelegte ausstehende Zeitüberschreitungen usw.). Das MessageEvent
hat die Typnachricht, eine data
Eigenschaft, die auf den Zeichenfolgenwert des ersten bereitgestellten Arguments festgelegt ist window.postMessage
, eine origin
Eigenschaft, die dem Ursprung des Hauptdokuments in dem Fenster entspricht, window.postMessage
das zum Zeitpunkt des Aufrufs window.postMessage
aufgerufen wurde, und eine source
Eigenschaft, aus der das Fenster stammt welches window.postMessage
heißt.
Zur Verwendung window.postMessage
muss ein Ereignis-Listener angehängt sein:
// Internet Explorer
window.attachEvent('onmessage',receiveMessage);
// Opera/Mozilla/Webkit
window.addEventListener("message", receiveMessage, false);
Und eine receiveMessage
Funktion muss deklariert werden:
function receiveMessage(event)
{
// do something with event.data;
}
Der externe Iframe muss außerdem Ereignisse ordnungsgemäß senden über postMessage
:
<script>window.parent.postMessage('foo','*')</script>
Jedes Fenster kann jederzeit auf diese Methode in jedem anderen Fenster zugreifen, unabhängig vom Speicherort des Dokuments im Fenster, um ihm eine Nachricht zu senden. Folglich muss jeder Ereignis-Listener, der zum Empfangen von Nachrichten verwendet wird, zuerst die Identität des Absenders der Nachricht unter Verwendung der Eigenschaften origin und möglicherweise source überprüfen. Dies kann nicht unterschätzt werden: Wenn die Eigenschaften und möglicherweise nicht überprüft werden, werden standortübergreifende Skriptangriffe aktiviert.origin
source
Quelle: https://developer.mozilla.org/en/DOM/window.postMessage