Estoy tratando de crear un sitio web que se pueda descargar y ejecutar localmente al iniciar su archivo de índice.
Todos los archivos son locales, no se utilizan recursos en línea.
Cuando intento usar el complemento AJAXSLT para jQuery para procesar un archivo XML con una plantilla XSL (en subdirectorios), recibo los siguientes errores:
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 realiza la solicitud es file:///C:/path/to/XSL%20Website/index.html
mientras los archivos JavaScript utilizados se almacenan enfile:///C:/path/to/XSL%20Website/assets/js/
.
¿Cómo puedo hacer para solucionar este problema?
Esencialmente, la única forma de lidiar con esto es tener un servidor web ejecutándose en localhost y servirlos desde allí.
Es inseguro que un navegador permita que una solicitud ajax acceda a cualquier archivo en su computadora, por lo tanto, la mayoría de los navegadores consideran que las solicitudes "file: //" no tienen origen con el propósito de " Política del mismo origen "
Iniciar un servidor web puede ser tan trivial como
cd
ingresar al directorio en el que se encuentran y ejecutan los archivos:fuente
python -m http.server
.Aquí hay un AppleScript que lanzará Chrome con el interruptor --allow-file-access-from-files activado, para desarrolladores de OSX / Chrome:
fuente
open -a 'Google Chrome' --args --allow-file-access-from-files
.Esta solución le permitirá cargar un script local usando jQuery.getScript (). Esta es una configuración global, pero también puede configurar la opción crossDomain por solicitud.
fuente
¿Qué pasa con el uso de la función JavaScript FileReader para abrir el archivo local, es decir:
Ahora haga clic en el
Choose file
botón y busque el archivofile:///C:/path/to/XSL%20Website/data/home.xml
fuente
Lanzamiento de cromo al igual que a esta restricción de bypass:
open -a "/Applications/Google Chrome.app/Contents/MacOS/Google Chrome" --args --allow-file-access-from-files
.Derivado del comentario de Josh Lee, pero necesitaba especificar la ruta completa a Google Chrome para evitar que Google Chrome se abra desde mi partición de Windows (en Parallels).
fuente
La forma en que acabo de solucionar esto es no usar XMLHTTPRequest en absoluto, sino incluir los datos necesarios en un archivo javascript separado. (En mi caso, necesitaba un blob SQLite binario para usar con https://github.com/kripken/sql.js/ )
Creé un archivo llamado
base64_data.js
(y solíabtoa()
convertir los datos que necesitaba e insertarlos en un archivo<div>
para poder copiarlos).y luego incluyó los datos en el html como javascript normal:
Me imagino que sería trivial modificar esto para leer JSON, tal vez incluso XML; Lo dejaré como un ejercicio para el lector;)
fuente
Usted puede intentar poner
'Access-Control-Allow-Origin':'*'
enresponse.writeHead(, {[here]})
.fuente
use el 'servidor web para la aplicación de Chrome'. (en realidad lo tienes en tu PC, ya sea que lo sepas o no. ¡Solo búscalo en Cortana!). ábralo y haga clic en 'elegir archivo', elija la carpeta con su archivo. en realidad no seleccione su archivo. seleccione su carpeta de archivos y luego haga clic en los enlaces debajo del botón 'elegir carpeta'.
si no lo lleva al archivo, agregue el nombre del archivo a las urs. Me gusta esto:
enlace al servidor web para Chrome: haga clic en mí
fuente