203 votos

Null origen XMLHttpRequest no se permite acceso-Control-Allow-Origin para file:/// a file:/// (servidor)

Estoy tratando de crear un sitio web que puede ser descargado y ejecutado localmente por el lanzamiento de su archivo de índice.

Todos los archivos son locales, ya que se utilizan los recursos en línea.

Cuando trato de usar el AJAXSLT plugin para jQuery para procesar un archivo XML con una plantilla XSL (en el sub directorios), recibo el siguiente error:

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/data/home.xml. Origin null is not allowed by Access-Control-Allow-Origin.

XMLHttpRequest cannot load file:///C:/path/to/XSL%20Website/assets/xsl/main.xsl. Origin null is not allowed by Access-Control-Allow-Origin.

El archivo de índice que hace la solicitud es file:///C:/path/to/XSL%20Website/index.html mientras que los archivos JavaScript se utiliza se almacena en file:///C:/path/to/XSL%20Website/assets/js/.

¿Cómo puedo hacer para arreglar este problema?

174voto

zourtney Puntos 4501

Para los casos en que se ejecuta un servidor web local no es una opción, puede que Chrome acceso a file:// de archivos a través de un navegador interruptor. Después de algo de investigación, me encontré con esta discusión, que menciona un navegador interruptor en la apertura del post. Ejecutar Chrome ejemplo, con:

chrome.exe --allow-file-access-from-files

Esto puede ser aceptable para entornos de desarrollo, pero poco más. Ciertamente, usted no quiere que este todo el tiempo. Esta parece ser una cuestión abierta (a partir de enero de 2011).

Ver también: Problemas con jQuery getJSON el uso de archivos locales en Chrome

86voto

Singletoned Puntos 2652

Esencialmente, la única manera de lidiar con esto es tener un servidor web corriendo en localhost y a servir a partir de ahí.

Es inseguro para un navegador para permitir una petición ajax para acceder a cualquier archivo en su computadora, por lo tanto, la mayoría de los navegadores parecen tratar de "file://a las peticiones de" como no tener origen con el propósito de "Origen Mismo de la Política"

A partir de un servidor web puede ser tan trivial como cding en el directorio que los archivos están en marcha:

python -m SimpleHTTPServer

4voto

Reno Puntos 886

Esta solución le permitirá cargar un script local usando jQuery.getScript(). Este es un escenario global, pero también puede establecer la opción crossDomain sobre una base por-solicitud.

$.ajaxPrefilter( "json script", function( options ) {
  options.crossDomain = true;
});

4voto

ericsoco Puntos 1948

Aquí es un applescript que lanzará el cromo con el--permitir-archivo-acceso-de-archivos interruptor encendido, para OSX/cromo devs afuera:

set chromePath to POSIX path of "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome"    
set switch to " --allow-file-access-from-files"
do shell script (quoted form of chromePath) & switch & " > /dev/null 2>&1 &"

1voto

Shikon Puntos 11

Puede intentar poner 'Access-Control-Allow-Origin':'*' en response.writeHead(, {[here]}) .

Iteramos.com

Iteramos es una comunidad de desarrolladores que busca expandir el conocimiento de la programación mas allá del inglés.
Tenemos una gran cantidad de contenido, y también puedes hacer tus propias preguntas o resolver las de los demás.

Powered by: