Estoy trabajando en un proyecto que utiliza un trabajador web.
En mi sección principal tengo este código:
var worker = new Worker("worker.js");
// More code
Esto funciona bien en Safari, pero Chrome informa el siguiente error:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
¿Por qué esto funciona perfectamente en Safari pero no en Chrome? ¿Cómo puedo solucionar esto?
Gracias.
file:///E:/programming/web/project/worker.js
. El camino para el proyecto principal es la siguiente:file:///E:/programming/web/project/index.html
.Respuestas:
Chrome no le permite cargar trabajadores web cuando ejecuta scripts desde un archivo local.
fuente
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
y no es bueno que las páginas web puedan acceder a su sistema de archivos por capricho.Yo uso una solución. Bloques de cromo
Worker
pero no<script>
. Por lo tanto, la mejor manera de hacer una solución universal es esta:A continuación, lo vincula normalmente
<script src="..."
. Y una vez que la función está definida, usas esta abominación de código:fuente
window!=seld
comprueba si el código se está ejecutando en el trabajador web. Esto hace que este código sea portátil en caso de que cargue el archivo javascript directamente en otros contextos.Noble Chicken ha explicado correctamente el problema, pero tengo una solución más general. En lugar de instalar wamp o xamp, con python puede navegar a la carpeta en la que está alojado su proyecto y escribir:
python -m http.server
Solo eso y tendrá un servidor en ejecución en esa carpeta, accesible desde localhost.
fuente
python -m SimpleHTTPServer 8000
ellas, ya que están cargadas con <Python 3 (solo para guardar otra búsqueda de Google: D)php -S localhost:8000
También puede usar la marca --allow-file-access-from-files cuando inicia Chrome.
Ejemplo para MacOsX:
Más información: configuración del trabajador web para Chrome
fuente
--allow-file-access-from-files
bandera activada". como se indica en stackoverflow.com/a/21771754/325418Es por las restricciones de seguridad. Necesita usar
http://
o elhttps://
protocolo en lugar defile:///
.Si tiene NodeJS instalado, simplemente puede hacer lo siguiente. - Tenga en cuenta que esta es una de las muchas opciones disponibles.
Ahora puede usarlo en cualquier carpeta a través de la que desee acceder a los contenidos
http
.Navegar a
http://localhost:8000
(puerto predeterminado: 8000)fuente
También tuve el mismo problema que tu publicación. La solución es que debes ejecutarlo con localhost (wamp o xamp). Estará hecho.
fuente
Otra solución alternativa es utilizar el servidor web de Google para la extensión de Chrome . Elija su directorio de trabajo e inicie el servidor, ¡Listo!
fuente
necesita un servidor web para la solicitud del protocolo HTTP en lugar de un archivo local y funciona correctamente :)
fuente
Chrome
cargar el archivo pero no puede ejecutarlo. UtiliceFirefox
. Me está funcionando.fuente
Una forma fácil de hacer un servidor http local en Chrome es esta aplicación:
Servidor web para Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Descripción:
Y no es inseguro como flag --allow-file-access-from-files
fuente
Esto está inspirado en la respuesta de Thomas anterior. Pero con una advertencia de que quería distribuir solo el HTML, así que convertí manualmente el js a dataURL . y habilitando la casilla de verificación URL de datos en él.
fuente
Con Python 2.x desplegado más ampliamente que Python 3.x, algo como
python -m SimpleHTTPServer 8000
es aplicable de manera más general, y no solo para Mac OS X. Lo encontré necesario para su uso bajo Cygwin, por ejemplo.Con eso en su lugar, este ejemplo funcionó como un campeón.
fuente
Como se mencionó, Chrome no lo admite. Me gusta definir a mis trabajadores en el mismo archivo. Esta es una solución de trabajo que aumentará un número encontrado en innerHTML del elemento con
id=num
cada 500ms.fuente
Una razón probable es que Chrome no le permite cargar trabajadores web cuando ejecuta scripts desde un archivo local. Y trato de ejecutar el código en mi firefox, tampoco puedo.
fuente
file://
en Firefox 51.0.1Sí, no funcionará en chorome si está cargando un archivo local. Pero funcionará bien en el navegador Firefox. Y debe agregar el siguiente código en el archivo HTML.
fuente