2010-10-01 13 views

risposta

18

La risposta breve è impossibile, perché le richieste AJAX sono limitate allo stesso dominio (secondario) e alla porta dallo Same Origin Policy.

Le stesse restrizioni si applicano agli elementi iframe: non è possibile creare un iframe che punta alla pagina esterna e prelevare il relativo codice HTML da lì.

Il modo usuale è utilizzare uno script sul lato server (scritto ad es. In PHP) che funge da proxy: recupera il contenuto del sito esterno e lo restituisce a JavaScript. Dovrà essere eseguito sullo stesso dominio della pagina.

Ovviamente, utilizzando questa soluzione, i riferimenti relativi a URL, immagini, fogli di stile e simili (ad esempio ../images/image.gif) non funzioneranno più, poiché sono fuori contesto nella pagina. Se questo è un problema nella tua situazione è impossibile da dire. Una soluzione alternativa potrebbe essere l'utilizzo di <base> tag.

+0

Possiamo farlo. Prova questo: http://crossorigin.me/ –

+0

Ecco un blog sullo stesso: https://blog.codepen.io/2015/07/10/crossorigin-me/ –

+1

@KushalJayswal che è esattamente il tipo di "server" script secondario che funge da proxy "di cui ho parlato. Viene fornito con una moltitudine di problemi, uno dei quali è illustrato dal fatto che il sito è attualmente offline, probabilmente a causa di un carico pesante. Per qualsiasi tipo di utilizzo professionale, tale servizio è molto lontano da "noi possiamo farlo" –

5

È necessario jquery $.get

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

Esempio: Avvertire i risultati dal richiedere test.cgi con un payload aggiuntiva dei dati (HTML o XML, a seconda di ciò che è stato restituito).

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

Modifica: questo funziona solo se la pagina è nello stesso dominio.

+0

Non è possibile neanche: L'HTML dell'iframe non sarà accessibile al genitore JavaScript a causa della stessa politica di origine –

+0

quindi lì non è affatto una soluzione :) – Stefanvds

3

È possibile utilizzare $ .ajax o $ .get per effettuare una chiamata a un URL nel proprio dominio e quindi utilizzare qualsiasi lingua lato server utilizzata per recuperare l'HTML e quindi restituirlo.

Si tratta di due richieste HTTP invece di una, ma si aggirerà il problema.

È inoltre possibile memorizzare nella cache l'HTML dei siti esterni nel codice backend in modo che una richiesta proveniente da Javascript non comporti sempre due richieste HTTP, ovviamente dipende dalla frequenza con cui l'HTML che si desidera catturare.

Una leggera svolta su quanto sopra sarebbe avere un'attività in background in esecuzione sul server che recupera l'HTMl esterno ogni X secondi e lo salva localmente. Le richieste al tuo dominio dal tuo JS prelevano l'ultima copia dal tuo server. Ciò significa che la tua richiesta JS non viene rallentata in attesa di un'altra richiesta HTTP esterna.

0

Tutti i browser comuni non consentono alle chiamate Javasript di accedere a qualsiasi pagina con un altro dominio (secondario) a causa della stessa politica di origine. L'unico modo per ovviare a questo è impostare una sorta di "proxy" sul proprio server (ad esempio uno script php) che viene eseguito nello stesso dominio, ottiene le informazioni desiderate da una terza fonte e le stampa.

0

È possibile aggiungere un PHP o qualsiasi altra lingua lato server al sito che potrebbe fungere da proxy per lo script per recuperare la pagina html.

Si potrebbe quindi chiamare il proxy server side con l'url utilizzando Ajax che restituirebbe l'HTMl di quella pagina.