Estoy tratando de cargar un modelo 3D en Three.js con JSONLoader
, y ese modelo 3D está en el mismo directorio que todo el sitio web.
Recibo el "Cross origin requests are only supported for HTTP."
error, pero no sé qué lo está causando ni cómo solucionarlo.
Respuestas:
Mi bola de cristal dice que está cargando el modelo usando
file://
oC:/
, lo que se mantiene fiel al mensaje de error ya que nohttp://
Por lo tanto, puede instalar un servidor web en su PC local o cargar el modelo en otro lugar y usar
jsonp
y cambiar la URL ahttp://example.com/path/to/model
El origen se define en RFC-6454 como
Entonces, aunque su archivo se origine en el mismo host (
localhost
), pero siempre que el esquema sea diferente (http
/file
), se tratarán como un origen diferente.fuente
file://
, pero no entiendo por qué está permitido. Bueno, estoy instalando Lampp, supongo ...load('file://C:/users/user/supersecret.doc')
y luego subir el contenido a su servidor usando AJAX, etcSolo para ser explícito: sí, el error indica que no puede apuntar su navegador directamente a
file://some/path/some.html
Estas son algunas opciones para activar rápidamente un servidor web local para permitir que su navegador procese archivos locales
Python 2
Si tienes instalado Python ...
Cambie el directorio a la carpeta donde
some.html
existen sus archivos utilizando el comandocd /path/to/your/folder
Inicie un servidor web Python con el comando
python -m SimpleHTTPServer
Esto iniciará un servidor web para alojar toda su lista de directorios en
http://localhost:8000
python -m SimpleHTTPServer 9000
que le proporcione un enlace:http://localhost:9000
Este enfoque está integrado en cualquier instalación de Python.
Python 3
Siga los mismos pasos, pero use el siguiente comando en su lugar
python3 -m http.server
Node.js
Alternativamente, si exige una configuración más receptiva y ya usa nodejs ...
Instalar
http-server
escribiendonpm install -g http-server
Cambie a su directorio de trabajo, donde
some.html
viveInicie su servidor http emitiendo
http-server -c-1
Esto hace girar un Node.js httpd que sirve los archivos en su directorio como archivos estáticos accesibles desde
http://localhost:8080
Rubí
Si su idioma preferido es Ruby ... los Dioses Ruby dicen que esto también funciona:
PHP
Por supuesto, PHP también tiene su solución.
fuente
$ python -m SimpleHTTPServer
, lo que produce el mensaje:Serving HTTP on 0.0.0.0 port 8000 ...
Si escribe mal el nombre del módulo, por ejemplo$ python -m SimpleHttpServer
, recibirá el mensaje de errorNo module named SimpleHttpServer
. Recibirá un mensaje de error similar si tiene python3 instalado (v. python 2.7). Puede comprobar la versión de Python usando el comando:$ python --version
. También puede especificar el puerto para escuchar de esta manera:$ python -m SimpleHTTPServer 3333
$ cd ~/angular_projects/1app
, entonces$ python -m SimpleHTTPServer
. En su navegador ingrese la urlhttp://localhost:8000/index.html
. También puede solicitar archivos en subdirectorios del directorio donde inició el servidor, por ejemplohttp://localhost:8000/subdir/hello.html
En Chrome puedes usar esta bandera:
Leer más aquí.
fuente
--allow-file-access-from-files
). Significa usar Chrome para la navegación web común y usar Chromium como la aplicación predeterminada para el archivo HTML.fetch()
todavía lo niega de todos modos. Debe usarXMLHttpRequest
de alguna maneraMe encontré con esto hoy.
Escribí un código que se parecía a esto:
... pero debería haberse visto así:
La única diferencia fue la falta de
http://
en el segundo fragmento de código.Solo quería publicar eso en caso de que haya otros con un problema similar.
fuente
Simplemente cambie la url a en
http://localhost
lugar delocalhost
. Si abre el archivo html desde local, debe crear un servidor local para servir ese archivo html, la forma más sencilla es usarloWeb Server for Chrome
. Eso solucionará el problema.fuente
Web Server for Chrome
enlace de la aplicación: es, con mucho, la solución más simple y limpia para la configuración temporal de httpd para Chrome IMOEn una aplicación de Android, por ejemplo, para permitir que JavaScript tenga acceso a los activos a través de
file:///android_asset/
, usesetAllowFileAccessFromFileURLs(true)
elWebSettings
que obtiene al llamargetSettings()
alWebView
.fuente
Use
http://
ohttps://
para crear urlerror :
localhost:8080
solución :
http://localhost:8080
fuente
La forma más rápida para mí fue: para los usuarios de Windows, ejecute su archivo en Firefox. El problema resuelto, o si desea usar Chrome, la forma más fácil para mí fue instalar Python 3 y luego desde el símbolo del sistema ejecutar el comando y
python -m http.server
luego ir a http: // localhost: 8000 / luego navega a tus archivosfuente
Voy a enumerar 3 enfoques diferentes para resolver este problema:
npm
paquete muy liviano : instale live-server usandonpm install -g live-server
. Luego, vaya a ese directorio, abra la terminal y escribalive-server
y presione enter, la página se servirá enlocalhost:8080
. BONIFICACIÓN: también admite la recarga en caliente de forma predeterminada.target
a"C:\Program Files (x86)\Google\Chrome\Application\chrome.exe" --disable-web-security --user-data-dir="C:/ChromeDevSession"
y guardar. Luego, usando Chrome, abra la página usandoctrl+o
. NOTA: NO use este acceso directo para la navegación regular.fuente
Para aquellos en Windows sin Python o Node.js, todavía hay una solución liviana: Mongoose .
Todo lo que debe hacer es arrastrar el ejecutable a donde sea que esté la raíz del servidor y ejecutarlo. Aparecerá un icono en la barra de tareas y navegará al servidor en el navegador predeterminado.
Además, Z-WAMP es un WAMP 100% portátil que se ejecuta en una sola carpeta, es increíble. Esa es una opción si necesita un servidor PHP y MySQL rápido.
fuente
Si usa Mozilla Firefox, funcionará como se espera sin ningún problema;
PD Sorprendentemente, IntenetExplorer_Edge funciona absolutamente bien !!!
fuente
Solución fácil para quienes usan VS Code
He estado recibiendo este error por un tiempo. La mayoría de las respuestas funciona. Pero encontré una solución diferente. Si no desea tratar con
node.js
ninguna otra solución aquí y está trabajando con un archivo HTML (llamando a funciones desde otro archivo js o buscando json api's) intente usar la extensión Live Server .Le permite abrir un servidor en vivo fácilmente. Y debido a que crea un
localhost
servidor, el problema se está resolviendo. Simplemente puede comenzarlocalhost
abriendo un archivo HTML y hacer clic derecho en el editor y hacer clic enOpen with Live Server
.Básicamente carga los archivos usando en
http://localhost/index.html
lugar de usarfile://...
.EDITAR
No es necesario tener un
.html
archivo. Puede iniciar el servidor en vivo con accesos directos.Espero que ayude a alguien :)
fuente
Recibí este error exacto al cargar un archivo HTML en el navegador que estaba usando un archivo json del directorio local. En mi caso, pude resolver esto creando un servidor de nodo simple que permitía almacenar contenido estático. Dejé el código para esto en esta otra respuesta .
fuente
Le sugiero que use un mini servidor para ejecutar este tipo de aplicaciones en localhost (si no está usando algún servidor incorporado).
Aquí hay uno que es muy simple de configurar y ejecutar:
fuente
Sospecho que ya se menciona en algunas de las respuestas, pero lo modificaré ligeramente para tener una respuesta de trabajo completa (más fácil de encontrar y usar).
Vaya a: https://nodejs.org/en/download/ . Instalar nodejs.
Instale el servidor http ejecutando el comando desde el símbolo del sistema
npm install -g http-server
.Cambie a su directorio de trabajo, donde
index.html
/yoursome.html
reside.Inicie su servidor http ejecutando el comando
http-server -c-1
Abra el navegador web en
http://localhost:8080
ohttp://localhost:8080/yoursome.html
, según su nombre de archivo html.fuente
Simplemente dice que la aplicación debe ejecutarse en un servidor web. Tuve el mismo problema con Chrome, comencé tomcat y moví mi aplicación allí, y funcionó.
fuente
er. Acabo de encontrar algunas palabras oficiales "Intentando cargar módulos AMD remotos no construidos que usan el complemento dojo / texto fallarán debido a restricciones de seguridad de origen cruzado. (Las versiones integradas de módulos AMD no se ven afectadas porque las llamadas a dojo / texto son eliminadas por el sistema de compilación.) " https://dojotoolkit.org/documentation/tutorials/1.10/cdn/
fuente
Una forma en que funcionó cargando archivos locales es usarlos en la carpeta del proyecto en lugar de fuera de la carpeta del proyecto. Cree una carpeta debajo de los archivos de ejemplo de su proyecto de forma similar a la forma en que creamos para las imágenes y reemplace la sección donde usa la ruta local completa que no sea la ruta del proyecto y use la URL relativa del archivo en la carpeta del proyecto. Funciono para mi
fuente
Para todos ustedes
MacOS
... configure un LaunchAgent simple para habilitar estas capacidades glamorosas en su propia copia de Chrome ...Guarde un
plist
, nombrado lo que sea (launch.chrome.dev.mode.plist
por ejemplo)~/Library/LaunchAgents
con contenido similar a ...Se debe lanzar en el arranque .. pero puede forzar a hacerlo en cualquier momento con el comando de terminal
launchctl load -w ~/Library/LaunchAgents/launch.chrome.dev.mode.plist
TADA! 😎 💁🏻 🙊 🙏🏾
fuente
Inicie el servidor de aplicaciones, y debería poder acceder al archivo desde localhost
fuente
No es posible cargar archivos locales estáticos (por ejemplo: svg) sin servidor. Si tiene NPM / YARN instalado en su máquina, puede configurar un servidor http simple usando " http-server "
fuente
Muchos problemas para esto, con mi problema falta '/' ejemplo: jquery-1.10.2.js: 8720 XMLHttpRequest no puede cargar http: // localhost: xxxProduct / getList_tagLabels / Debe ser: http: // localhost: xxx / Product / getList_tagLabels /
Espero esta ayuda para quienes se encuentran con este problema.
fuente
También he podido recrear este mensaje de error al usar una etiqueta de anclaje con la siguiente href:
En mi caso, se estaba usando una etiqueta para obtener el 'Cursor de puntero' y el evento en realidad estaba controlado por algún evento jQuery on click. Eliminé el href y agregué una clase que se aplica:
fuente
Para usuarios de Linux Python:
fuente
google-chrome --allow-file-access-from-files <url>
cual no funcionaría y sería más conciso?Si insiste en ejecutar el
.html
archivo localmente y no servirlo con un servidor web, puede evitar que esas solicitudes de origen cruzado sucedan en primer lugar haciendo que los recursos problemáticos estén disponibles en línea.Tuve este problema al intentar servir
.js
archivosfile://
. Mi solución fue actualizar mi script de compilación para reemplazar las<script src="...">
etiquetas<script>...</script>
. Aquí hay ungulp
enfoque para hacerlo:1. ejecutar
npm install --save-dev
a paquetesgulp
,gulp-inline
ydel
.2. Después de crear
gulpfile.js
a en el directorio raíz, agregue el siguiente código (simplemente cambie las rutas de archivo para lo que le convenga):gulp bundle-for-local
o actualice su script de compilación para ejecutarlo automáticamente.Puede ver el problema detallado y la solución para mi caso aquí .
fuente
Córdoba logra esto. Todavía no puedo entender cómo le fue a Córdoba. Ni siquiera pasa por shouldInterceptRequest.
Más tarde descubrí que la clave para cargar cualquier archivo desde local es: myWebView.getSettings (). SetAllowUniversalAccessFromFileURLs (true);
Y cuando desee acceder a cualquier recurso http, la vista web realizará una comprobación con el método OPTIONS, al que puede otorgar el acceso a través de WebViewClient.shouldInterceptRequest devolviendo una respuesta, y para el siguiente método GET / POST, puede devolver nulo.
fuente
Primero cierre todas las instancias de Chrome.
después de eso sigue esto.
Usé este comando en mac.
"/ Aplicaciones / Google Chrome.app/Contents/MacOS/Google Chrome" --allow-file-access-from-files
Para ventanas:
¿Cómo iniciar html usando Chrome en modo "--allow-file-access-from-files"?
fuente
Experimenté esto cuando descargué una página para verla sin conexión.
Sólo tenía que quitar el
integrity="*****"
ycrossorigin="anonymous"
atributos de todo<link>
y<script>
etiquetasfuente