2010-08-14 19 views

Respuesta

2

Hay diferentes maneras de evitar esto, dependiendo del navegador que está utilizando para el desarrollo. Por ejemplo:

  • En Firefox (Gecko), ajuste security.fileuri.strict_origin_policy-false
  • En Chrome, iniciar el navegador con la opción --allow-file-access-from-files

Referencias: Firefox, Chrome

0

Dado que este es un problema de desarrollo y no un problema para el usuario final/funcionalidad, en lugar de centrarse en conseguir AJAX para cruzar dominios consiguen el sistema a su entorno de desarrollo como un proxy para buscar los datos más recientes de los servidores de producción. Esto es realmente muy fácil de hacer.

que había necesidad de configurar un servidor web en su entorno de desarrollo (si no tiene uno ya), y luego configurar el servidor para responder a las solicitudes de 404 por ir a buscar y luego haciendo eco de los datos de producción. Puede configurar su servidor para que solo se recojan los archivos de datos AJAX (de lo contrario, será confuso depurar otros archivos si los activos de producción comienzan a aparecer en sus páginas de desarrollo). Entonces, si falta http://dev.myserver.com/data/json/mydata.json, su script 404 obtendrá http://prod.myserver.com/data/json/mydata.json y lo repetirá al cliente. Lo bueno de esta configuración es que puedes usar datos simulados muy fácilmente: si el archivo está allí en tu entorno de desarrollo, tu script AJAX lo obtendrá; pero si luego borra o renombra ese archivo, obtendrá los datos de producción en su lugar. Esta característica ha sido tan útil que no puedo recomendarla lo suficiente.

Si está trabajando con XML, lo recomiendo duplicar las cabeceras HTTP en el 404. Si el proceso 404 responde con un Content-Type de text/html, no se obtendrá ningún responseXML a analizar.

4

Tuvimos la misma necesidad en el desarrollo de nuestra aplicación web. Así es como lo hicimos:

El navegador y el servidor se comunican sólo a través de JSON.
Todo el HTML es interpretado en el navegador usando PURE (nuestro motor de plantillas JS).
El código del navegador se desarrolla a nivel local como esto:

se añade un parámetro host en el URL de la aplicación:

http://localhost/app.html?host=test.beebole-apps.com 

En la producción, el JSON se envían al servidor con un POST.
Pero aquí la función a cargo de la llamada ajax reaccionará al parámetro host y realizará una inyección JSONP (GET) en su lugar.

<script src="http://test.beebole-apps.com/?callback=f2309892&json={...}" /> 
  • f2309892 es una función temporal, con un nombre aleatorio, que apunta al método que controlará la respuesta
  • json es el JSON que enviamos al servidor

Significa Necesitará una cierta cooperación del backend para servirle al json envuelto en una función de devolución de llamada como:

f2309892(/*the json here*/); 

Excepto una limitación de tamaño (no se puede enviar un JSON grande al servidor con un GET) funciona como una brisa.
Otra ventaja es que puede llamar a todos los diferentes sistemas (desarrollo y prueba) desde el mismo servidor local.

+0

esto es genial! Me doy cuenta de que no tienes este uso local de PURE en http://beebole.com/pure/documentation/what-is-pure-and-why/ ... Además, ¿puedes ampliar tus palabras un poco para escribir un tutorial en http://beebole.com/pure/documentation/? – ina

+0

también (solo para estar seguro) - 'http: //localhost/app.html? Host = test.beebole-apps.com' está en el lado del cliente (donde tiene el cliente descarga una aplicación con algún tipo de servidor web o pasador de URL en él ...) y llama al servidor 'test.beebole-apps.com'? – ina

+0

PURE es una biblioteca JS que genera HTML a partir de datos JSON. Funciona en el navegador. Si descarga el archivo zip, hay un directorio llamado tutorial con algunos ejemplos. – Mic

6

Aquí está la respuesta simple: cromo --disable-web-seguridad

A partir del código fuente (chrome_switches.h):

// Don't enforce the same-origin policy. (Used by people testing their sites.) 
const char kDisableWebSecurity[]   = "disable-web-security"; 

que quería utilizar jquery.js para enviar llamadas AJAX a un servidor de python de Google Apps que se ejecuta en el puerto 8080. Solo para probarlo, quería ejecutar el navegador y el servidor en la misma máquina.

No entiendo todos los matices de seguridad, pero para el desarrollo temporal parece una solución razonable. Siempre que solo use Chrome para probar con esta bandera, no debería ser un problema.

Aquí está el comando completo para Mac OS X:

/Aplicaciones/Google \ Chrome.app/Contents/MacOS/Google \ Chrome --disable-web-seguridad

+0

Recuerde matar todas las instancias del proceso de Chrome antes de hacer esto o no funcionará. – Ferruccio

0

tuve ese problema, también , el uso de Chrome y la opción --allow-file-access-from-files realmente no ayudaron. Volver a la escritura de mi servidor tenía que volver, añadí estas cabeceras a la respuesta y funcionó bien:

'Access-Control-Allow-Origin: http://localhost/' 

y otro para permitir una especie de intercambio de claves

'Access-Control-Allow-Headers: X-KEY' 
1

Sin tocar el servidor -

La forma más rápida y sencilla de eludir la misma política de seguridad de origen en Firefox es instalar el complemento Force CORS. Esto funciona con cualquier servicio al insertar los encabezados adecuados en cada respuesta.

https://addons.mozilla.org/en-US/firefox/addon/forcecors/

+0

Vale la pena mencionar que después de la instalación debe hacer clic en view => toolbars>> add-on bar. Luego, el botón cors se mostrará en la parte inferior derecha, haga clic en eso para habilitarlo. Descomprimí el xpi y veo que hay una función de alternar cuando se presiona un botón, pero nunca se ve el botón. – HMR

Cuestiones relacionadas