2010-10-01 11 views

Antwort

18

Die kurze Antwort ist, dass Sie nicht können, da AJAX-Anfragen auf die gleiche (Sub-) Domäne und Port durch die Same Origin Policy beschränkt sind.

Die gleichen Einschränkungen gelten für iframe Elemente: Sie können keine iframe auf die externe Seite zeigen, und greifen Sie seine HTML von dort.

Der übliche Weg besteht darin, ein serverseitiges Skript (z. B. in PHP geschrieben) zu verwenden, das als Proxy dient: Es ruft den Inhalt der externen Website ab und stellt ihn wieder zu JavaScript bereit. Es muss auf der gleichen Domain wie die Seite laufen.

Offensichtlich werden mit dieser Lösung relative Verweise auf URLs, Bilder, Stylesheets und dergleichen (z. B. ../images/image.gif) nicht mehr funktionieren, da sie außerhalb des Kontexts auf Ihrer Seite liegen. Ob das ein Problem in Ihrer Situation ist, ist unmöglich zu sagen. Eine Abhilfe hierfür könnte die Verwendung eines <base> tag sein.

+0

Wir können es tun. Versuchen Sie folgendes: http://crossorigin.me/ –

+0

Hier ist ein Blog auf der gleichen: https://blog.codepen.io/2015/07/10/crossorigin-me/ –

+1

@KushalJayswal das ist genau die Art von „Server Seitenskript, das als Proxy dient, "das ich erwähnte. Es kommt mit einer Vielzahl von Problemen, von denen einer von der Website derzeit offline dargestellt ist, wahrscheinlich wegen der schweren Last. Für jede Art von professionellen Gebrauch, ist, dass der Service ist sehr weit weg von „wir können es tun“ –

5

Sie benötigen jquery $.get

http://api.jquery.com/jQuery.get/

Beispiel: die Ergebnisse Alarmieren aus test.cgi mit einer zusätzlichen Nutzlast von Daten anfordert (HTML oder XML, je nachdem, was zurückgegeben wurde).

$.get("test.cgi", { name: "John", time: "2pm" }, 
    function(data){ 
    alert("Data Loaded: " + data); 
    }); 

Bearbeiten: Dies funktioniert nur, wenn Ihre Seite auf der gleichen Domäne ist.

+0

auch nicht möglich: Die 'iframe' HTML wird nicht an die Mutter JavaScript aufgrund der Same Origin Policy –

+0

so dann dort zugänglich sein ist überhaupt keine Lösung :) – Stefanvds

3

Sie könnten $ .ajax oder $ .get verwenden, um eine URL auf Ihrer eigenen Domäne aufzurufen und dann die server-seitige Sprache zu verwenden, die Sie zum Abrufen der HTML verwenden, und diese dann zurückgeben.

Es sind zwei HTTP-Anfragen statt einer, aber es wird Ihr Problem umgehen.

Sie könnten auch die externen Webseiten HTML in Ihrem Backend-Code-Cache, so dass eine Anfrage von der Javascript nicht immer in zwei HTTP-Anfragen führen - natürlich hängt alles davon ab, wie oft die HTML Sie wird sich ändern greifen.

Eine leichte Wendung bei den oben genannten würde eine Hintergrundaufgabe auf Ihrem Server ausgeführt werden, die die externe HTMl alle X Sekunden abruft und lokal speichert. Anfragen an Ihre Domain von Ihrem JS nehmen Sie einfach die neueste Kopie von Ihrem Server. Das bedeutet, dass Ihre JS-Anfrage nicht durch Warten auf eine weitere externe HTTP-Anfrage verlangsamt wird.

0

Alle gängigen Browser erlauben Javasript Calls aufgrund der Same Origin Policy keinen Zugriff auf Seiten mit einer anderen (Sub-) Domain. Der einzige Weg, um das zu arbeiten, ist eine Art von „Proxy“ auf Ihrem eigenen Server (zum Beispiel eines PHP-Script), die unter der gleichen Domain läuft einzurichten, bekommt die Informationen, die Sie aus einer dritten Quelle wollen und druckt sie aus.

0

Sie könnten Ihrer Site eine PHP- oder eine andere serverseitige Sprache hinzufügen, die als Proxy für Ihr Skript zum Abrufen der Seite html dienen könnte.

Sie könnten dann Ihre serverseitige Proxy mit der URL mit Ajax aufrufen, die Ihnen die HTMl dieser Seite zurückgeben würde.