Chrome ne peut pas charger un travailleur web

Je travaille sur un projet qui utilise un travailleur Web.

Dans ma section de tête, j'ai ce code:

var worker = new Worker("worker.js"); // More code 

Cela fonctionne bien dans Safari, mais Chrome déclare l'erreur suivante:

Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.

Pourquoi cela fonctionne-t-il parfaitement dans Safari mais pas Chrome? Comment puis-je réparer ça?

Je vous remercie.

    Pour de bonnes raisons, Chrome ne vous permet pas de charger des internautes lors de l'exécution de scripts à partir d'un fichier local. Remarque: Firefox ne fonctionnera pas non plus. Essayez Safari. 🙂

    Le problème a bien été expliqué par Noble Chicken mais j'ai une solution plus générale. Au lieu d'installer wamp ou xamp, avec python, vous pouvez naviguer vers le dossier dans python -m http.server votre projet est hébergé et tapez: python -m http.server

    Juste cela et vous aurez un serveur en cours sur ce dossier, accessible depuis localhost.

    J'utilise une solution de contournement. Chrome est un peu retardé, donc il bloque Worker mais pas <script> . D'où la meilleure façon de faire une solution universelle est la suivante:

     function worker_function() { // all code here } // This is in case of normal worker start // "window" is not defined in web worker // so if you load this file directly using `new Worker` // the worker code will still execute properly if(window!=self) worker_function(); 

    Vous le liez ensuite comme étant normal <script src="..." . Et une fois que la fonction est définie, vous utilisez cette abomination d'un code:

     new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'}))); 

    Vous pouvez également utiliser l' indicateur –allow-file-access-from-files lorsque vous lancez Chrome.

    Exemple pour MacOsX:

     /Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files 

    Plus d'informations: paramètres du travailleur Web pour chrome

    Vous avez besoin d'un serveur Web pour la demande du protocole HTTP Au lieu du fichier local et fonctionne correctement 🙂

    J'ai eu le même problème que votre poste. La solution est que vous devez l'exécuter avec localhost (wamp ou xamp). Cela sera fait.

    Avec Python 2.x étant plus largement déployé que Python 3.x, quelque chose comme python -m SimpleHTTPServer 8000 est plus généralement applicable, et pas seulement pour Mac OS X. J'ai trouvé qu'il était nécessaire d'utiliser sous Cygwin, par exemple.

    Avec cela en place, cet exemple a fonctionné comme un champion.

    Chrome charge le fichier mais ne peut l'exécuter. Utilisez Firefox . Cela fonctionne pour moi.

    Une raison probable est que chrome ne vous permet pas de charger des web-workers lors de l'exécution de scripts à partir d'un fichier local. Et j'essaie d'exécuter le code sur mon firefox, je ne peux pas non plus.

    C'est en raison des restrictions de sécurité. Vous devez utiliser le protocole http:// ou https:// au lieu du file:/// .

    Si vous avez installé NodeJS, vous pouvez simplement effectuer les opérations suivantes. – Notez que c'est l'une des nombreuses options disponibles

    Installer le serveur Web local

     $ npm install -g local-web-server 

    Maintenant, vous pouvez l'utiliser dans n'importe quel dossier que vous souhaitez accéder au contenu via http .

     $ ws 

    Accédez à http://localhost:8000 (port par défaut: 8000)