2009-05-29 12 views
40

Sto effettuando una chiamata di servizio web RESTful nella mia pagina JavaScript e ricevo il seguente avviso:Perché non viene visualizzato un avviso di "stessa politica di origine" quando si utilizza l'API di Google Maps?

"Questa pagina sta accedendo a informazioni che non sono sotto il suo controllo. Ciò comporta un rischio per la sicurezza. Vuoi continuare? "

Ora ho letto su questo e sono a conoscenza del cross-domain, same origin policy. Tuttavia, non ricevo tali avvisi quando consumo altre API come l'API di Google Maps. Chiaramente il dominio non è lo stesso del mio dominio locale. Qual è la differenza?

La mia ipotesi iniziale è che Google venga "importato" nella pagina utilizzando il tag <script> mentre il mio consumo REST utilizza XMLHttpRequest. Se questo è il caso, qual è la differenza tra questi due approcci che uno meriterebbe un avvertimento e l'altro no?

+0

Prendi uno strumento come Fiddler2 e guardare la magia – epascarello

+0

Questo non ha davvero funzionato per me. L'ho provato e ho ancora negato gli errori di autorizzazione in chrome e firefox. – Merritt

+0

@Merritt - Dovrai eseguire il debug di questo in parti. Se si visita la pagina proxy in un browser Web, viene restituito del testo il cui contenuto è la chiamata JavaScript? –

risposta

5

Quanto segue potrebbe spiegare le cose: http://markmail.org/message/5wrphjwmo365pajy

Inoltre, essi impiegano alcuni hack di script (ad esempio l'inserimento di uno script nel DOM per ottenere i dati richiesti, invece di XHR).

+0

Sembra che tu sia l'unica anima coraggiosa con la risposta giusta! Grazie! L'ultimo thread ha fornito un post sul blog di sintesi all'indirizzo: http://www.teamlalala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using- javascript/ –

+0

grazie per averlo indicato. ovviamente la loro tecnica potrebbe essere resa più utile prendendo i parametri della stringa di query per renderla più rilevante nella maggior parte dei casi. –

+2

Il tuo link non è più valido. Sebbene lavori per il gruppo di posta. –

0

Vorrei riassumere quale fosse la soluzione a questo problema. Puoi trovare un utile URL here.

In sostanza, si inserisce il codice tramite il tag delle pagine <script> durante l'importazione di JavaScript. Qualsiasi cosa importata tramite questo tag viene eseguita immediatamente nel contesto globale. Quindi, invece di passare in un file JavaScript, passare un URL a un sito web che restituisce una pagina non di tag HTML, ma invece una pagina che restituisce il testo del codice JavaScript che chiama un callback nel codice.

È possibile utilizzare i parametri URL per indicare alla pagina quale "richiamata" restituire e tutti i parametri che devono essere richiamati. Per esempio:

<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param1=myParam"></script> 

Quando questo viene valutato, il contenuto della pagina restituita dal parametro 'src' è:

myCallback(myParam); 

Sul lato server, verrà creato un sito in quel URL che sostituisce il OnLoad equivalente (con qualsiasi lingua lato server che si sta utilizzando). Invece di HTML di pagina, OnLoad prenderà i parametri URL e re-swizzle per abbinare la chiamata di richiamata sopra.

Quando si effettua la sostituzione, la richiamata viene immediatamente chiamata quando il client carica la pagina. Il vantaggio di questo è che l'URL 'src' non deve corrispondere al dominio della pagina ospitata.

Ecco ciò che la pagina HTML cliente sarà simile alla fine:

<script type="text/javascript"> 
    var myCallback = function(myParam) { 
     alert("this was called across domains!"); 
    }; 
</script> 
<script type="text/javascript" src="http://crossdomainhost/CrossDomainConsumerSite/Default.aspx?callback=myCallback&param=myParam></script> 
Problemi correlati