2009-05-29 21 views
40

Estoy haciendo una llamada a servicio web RESTful en mi página de JavaScript y me aparece la siguiente advertencia:¿Por qué no aparece una advertencia de 'misma política de origen' cuando uso la API de Google Maps?

"Esta página está accediendo a información que no está bajo su control. Esto plantea un riesgo de seguridad. ¿Desea continuar? "

Ahora he leído sobre esto y estoy al tanto del cross-domain, same origin policy. Sin embargo, no recibo tales advertencias cuando consumo otras API, como Google Maps API. Claramente, el dominio no es lo mismo que mi dominio local. ¿Cuál es la diferencia?

Mi conjetura inicial es que Google se 'importa' en la página usando la etiqueta <script> mientras que mi consumo de REST está usando XMLHttpRequest. Si ese es el caso, ¿cuál es la diferencia entre estos dos enfoques que uno merecería una advertencia y el otro no?

+0

Obtener una herramienta como Fiddler2 y ver la magia – epascarello

+0

Esto no funcionaba para mí. Lo intenté, y todavía obtuve la negación de los errores de permiso en Chrome y Firefox. – Merritt

+0

@Merritt - Tendrá que depurar esto en partes. Si navega a su página de proxy en un navegador web, ¿recibe de vuelta el texto cuyos contenidos son la llamada de JavaScript? –

Respuesta

5

El siguiente podría explicar cosas: http://markmail.org/message/5wrphjwmo365pajy

Además, se emplean algunos cortes de secuencias de comandos (por ejemplo, la inserción de una secuencia de comandos en el DOM para obtener los datos solicitados, en lugar de XHR).

+0

¡Parece que eres el alma valiente con la respuesta correcta! ¡Gracias! El último hilo dio una publicación resumida en el blog en: http://www.teamlalala.com/blog/2009/04/14/how-do-you-get-data-from-one-domain-to-another-using- javascript/ –

+0

gracias por señalar eso. obviamente su técnica podría ser más útil tomando los parámetros de cadena de consulta para hacerlo más relevante en la mayoría de los casos. –

+2

Su enlace ya no es válido. Aunque funciona el grupo de correo. –

0

Me gustaría resumir cuál fue la solución a este problema. Puede encontrar una URL útil here.

Esencialmente, se inyecta código a través de la etiqueta de las páginas <script> al importar JavaScript. Todo lo importado a través de esta etiqueta se ejecuta inmediatamente en el contexto global. Entonces, en lugar de pasar un archivo JavaScript, ingrese una URL a un sitio web que devuelve una página no de etiquetas HTML, sino una página que devuelve texto de código JavaScript que llama a una devolución de llamada en su código.

Utiliza parámetros de URL para indicar a la página qué devolución de llamada se debe devolver y los parámetros que deben introducirse en la devolución de llamada. Por ejemplo:

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

Cuando esto se evalúa, el contenido de la página devuelta por el parámetro 'origen' es:

myCallback(myParam); 

En el lado del servidor, se creará un sitio en esa dirección URL que anula la Equivalente de OnLoad (con el idioma del lado del servidor que esté usando). En lugar de HTML de página, OnLoad tomará los parámetros de URL y los volverá a mezclar para que coincidan con la llamada de devolución de llamada anterior.

Cuando se realiza la sustitución, se llama inmediatamente a la devolución de llamada cuando el cliente carga la página. El beneficio de esto es que la URL 'src' no tiene que coincidir con el dominio de la página alojada.

Esto es lo que la página HTML cliente se verá como al final:

<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> 
Cuestiones relacionadas