Wie funktionieren Mashups mit der gleichen Richtlinie?

11

Wenn Javascript nur auf Skripte derselben Domain zugreifen darf, wie kann eine Website Mashups erstellen, die Inhalte einer anderen Domain lesen und ändern müssen?

Jack Richardson
quelle

Antworten:

7

Browserübergreifende Lösungen

JSONP

Wenn die API, auf die Sie zugreifen möchten, JSONP unterstützt , müssen Sie in Ihrer Anforderung nur einen Javascript-Funktionsnamen angeben. JSONP gibt Javascript zurück, wie myfunc({the:data});Sie es wie normales Javascript ausführen können. Deshalb würden Sie ein neues <script src="www.website.com/somecall?jsonp=myfunc">Tag für erstellen "Anfrage senden" (jQuery erledigt dies automatisch, wenn Sie es type: jsonpin $.ajaxAnfragen verwenden).

Der Nachteil ist, dass der Anbieter der API JSONP unterstützen muss.

Blitz

Flash kann auf domänenübergreifende Inhalte zugreifen, solange die Zielwebsite crossdomain.xmlim Stammverzeichnis eine Datei enthält, die angibt, dass dies zulässig ist. Dies ist normalerweise auf Servern der Fall, die eine API bereitstellen.

Der Nachteil ist, dass Flash im Browser des Benutzers erforderlich ist und dass die Website, von der Sie Daten erhalten, eine crossdomain.xml haben muss, die domänenübergreifende Anforderungen zulässt.

Serverseitiges Skript mit demselben Domänennamen

Serverseitige Sprachen wie PHP unterliegen keinen BS-Einschränkungen für dieselbe Domäne. Sie können also ein Skript verwenden, das als Proxy fungiert (z. B. Download über eine der http-Erweiterungen wie cURL).

Der zusätzliche Vorteil besteht darin, dass Sie die Daten (oder sogar mehrere Quellen) auf dem Server bereinigen können, bevor Sie sie an Ihre Webseite / Ihr Javascript weiterleiten, sodass Sie sogar nur den nützlichen Teil der Daten extrahieren können, was bei der mobilen Webanwendung hilfreich ist wo Bandbreite ein Problem sein kann.

Der Nachteil ist, dass alle Anforderungen über Ihren Server gesendet werden müssen, wodurch die Belastung Ihres Servers erhöht wird.

Der Vorteil ist jedoch, dass es mit jeder Ressource funktioniert, da das Ziel keine Crossdomain oder JSONP unterstützen muss. Wenn also nichts anderes funktioniert, würde dies funktionieren.


Spezifische Lösungen für einige Browser

Internet Explorer

Internet Explorer verfügt über eine domänenübergreifende Anforderung

Feuerfuchs

Firefox 3.5+ hat den Standard für die gemeinsame Nutzung von Ursprüngen , erfordert jedoch die Ressource, auf die Sie zugreifen möchten, um spezielle Header einzuschließen, z. B. in PHP:

header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");

Einige andere gängige Browser unterstützen dies ebenfalls . Wenn Sie also keine alten Browser unterstützen müssen und die Ressourcen erhalten, auf die Sie zugreifen möchten, um diese Header zu senden, ist dies möglicherweise die beste Wahl, andernfalls auf der Serverseite Skript wäre meine Empfehlung.


Firefox hat auch eine Benutzereinstellung capability.policy.default.XMLHttpRequest.open, aber ich würde nicht damit rechnen, dass der Benutzer eine Einstellung in seinem Browser ändert.

Wildpeaks
quelle
0

Sie können dafür die API (einer anderen Domain) verwenden. Ihr Javascript ruft die PHP-Datei (oder eine andere Skriptdatei) auf Ihrem Webserver (Ihrer Domain) auf, die die API (einer anderen Domain mit CURL) aufruft und die Antwort an Sie erhält.

Harish Kurup
quelle
Diese Antwort muss nicht so spezifisch für die auf dem Server verwendete Technologie sein.
Funkybro
@funkybro ja, es war nur ein Beispiel ... nichts Besonderes ...
Harish Kurup