Se a Javascript è consentito accedere solo a script dello stesso dominio, come può un sito Web creare mashup che devono leggere e modificare il contenuto di un altro dominio?
Se a Javascript è consentito accedere solo a script dello stesso dominio, come può un sito Web creare mashup che devono leggere e modificare il contenuto di un altro dominio?
Risposte:
Se l'API a cui stai tentando di accedere supporta JSONP , devi solo fornire un nome della funzione javascript nella tua richiesta, quindi JSONP restituisce javascript come il myfunc({the:data});
quale puoi eseguire come un normale javascript, motivo per cui dovresti creare un nuovo <script src="www.website.com/somecall?jsonp=myfunc">
tag per "invia una richiesta" (jQuery lo fa automaticamente se lo usi type: jsonp
nelle $.ajax
richieste).
Il rovescio della medaglia è che richiede il provider dell'API per supportare JSONP.
Flash può accedere ai contenuti tra domini purché il sito Web di destinazione abbia un crossdomain.xml
file alla radice che dice che lo consente, come di solito accade sui server che forniscono un'API).
L'aspetto negativo è che richiede Flash nel browser dell'utente e che il sito Web da cui si ottengono i dati deve avere un crossdomain.xml che consenta le richieste tra domini.
I linguaggi lato server come PHP non hanno restrizioni dello stesso dominio BS, quindi potresti avere uno script che funge da proxy (ad es. Download tramite una delle estensioni http come cURL).
Il vantaggio aggiuntivo è che puoi ripulire i dati (o persino eseguire il mashup di più fonti) sul server, prima di inoltrarli alla tua pagina web / javascript, in modo da poter estrarre solo la parte utile dei dati, il che è utile quando si esegue webapp mobile dove la larghezza di banda può essere un problema.
Il rovescio della medaglia è che tutte le richieste devono passare attraverso il tuo server, in modo da aumentare il carico sul tuo server.
Tuttavia, il vantaggio è che funzionerebbe con qualsiasi risorsa in quanto non richiede che l'obiettivo supporti il crossdomain o jsonp. Quindi, se nient'altro funziona, questo sarebbe.
Internet Explorer ha una richiesta tra domini
Firefox 3.5+ ha lo standard di condivisione tra le origini , ma richiede la risorsa a cui stai tentando di accedere per includere intestazioni speciali, ad esempio in PHP:
header("content-type: Access-Control-Allow-Origin: *");
header("content-type: Access-Control-Allow-Methods: GET");
Alcuni altri principali browser supportano anche questo , quindi se non hai bisogno di supportare vecchi browser e se riesci a ottenere le risorse a cui stai tentando di accedere per inviare quelle intestazioni, questa potrebbe essere la tua scommessa migliore, altrimenti il lato server la sceneggiatura sarebbe la mia raccomandazione.
Anche Firefox ha un'impostazione utente capability.policy.default.XMLHttpRequest.open
, ma non vorrei che l'utente modificasse un'impostazione nel suo browser.
Per questo puoi usare l'API (di un altro dominio). Il tuo Javascript chiamerà il file PHP (o altro file di script) che si trova sul tuo server web (il tuo dominio), che chiamerà l'API (di un altro dominio usando CURL) e ti risponderà.