Je travaille sur un projet qui utilise un web worker.
Dans ma section principale, j'ai ce code:
var worker = new Worker("worker.js");
// More code
Cela fonctionne bien dans Safari, mais Chrome signale 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 dans Chrome? Comment puis-je réparer ça?
Je vous remercie.
file:///E:/programming/web/project/worker.js
. Le chemin pour le projet principal est la suivante:file:///E:/programming/web/project/index.html
.Réponses:
Chrome ne vous permet pas de charger des collaborateurs Web lors de l'exécution de scripts à partir d'un fichier local.
la source
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
- et ce n'est pas cool pour les pages Web de pouvoir accéder simplement à votre système de fichiers sur un coup de tête.J'utilise une solution de contournement. Chrome bloque
Worker
mais pas<script>
. La meilleure façon de créer une solution universelle est donc la suivante:Vous le liez ensuite comme d'habitude
<script src="..."
. Et une fois la fonction définie, vous utilisez cette abomination de code:la source
window!=seld
vérifie si le code s'exécute dans Web Worker. Cela rend ce code portable au cas où vous chargez le fichier javascript directement dans d'autres contextes.Le problème a été correctement expliqué par Noble Chicken mais j'ai une solution plus générale pour cela. Au lieu d'installer wamp ou xamp, avec python, vous pouvez accéder au dossier dans lequel votre projet est hébergé et taper:
python -m http.server
Juste cela et vous aurez un serveur en cours d'exécution sur ce dossier, accessible à partir de l'hôte local.
la source
python -m SimpleHTTPServer 8000
car ils sont chargés avec <Python 3 (juste pour enregistrer une autre recherche Google: D)php -S localhost:8000
Vous pouvez également utiliser l' indicateur --allow-file-access-from-files lorsque vous lancez Chrome.
Exemple pour MacOsX:
Plus d'informations: Paramètres de l'agent Web pour Chrome
la source
--allow-file-access-from-files
indicateur activé." comme indiqué sur stackoverflow.com/a/21771754/325418C'est à cause des restrictions de sécurité. Vous devez utiliser
http://
ouhttps://
protocole au lieu defile:///
.Si NodeJS est installé, vous pouvez simplement faire ce qui suit. - Notez que c'est l'une des nombreuses options disponibles
Vous pouvez maintenant l'utiliser dans n'importe quel dossier par lequel vous souhaitez accéder au contenu
http
.Accédez à
http://localhost:8000
(port par défaut: 8000)la source
J'ai eu le même problème que votre message aussi. La solution est que vous devez l'exécuter avec localhost (wamp ou xamp). Ce sera fait.
la source
Une autre solution de contournement consiste à utiliser le serveur Web de Google pour l' extension Chrome . Choisissez votre répertoire de travail et démarrez le serveur, c'est fait!
la source
vous avez besoin d'un serveur Web pour la demande du protocole HTTP au lieu d'un fichier local et fonctionne correctement :)
la source
Chrome
charge le fichier mais ne peut pas l'exécuter. UtilisezFirefox
. Ça marche pour moi.la source
Un moyen facile de créer un serveur http local dans ChromeCette application est un :
Serveur Web pour Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
La description:
Et ce n'est pas non plus sécurisé car flag --allow-file-access-from-files
la source
Ceci est inspiré par la réponse de Thomas ci-dessus. Mais avec une mise en garde que je voulais distribuer uniquement le HTML, j'ai donc converti manuellement les js en dataURL . et en activant la case à cocher URL des données.
la source
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. Je l'ai trouvé nécessaire pour une utilisation sous Cygwin, par exemple.Avec cela en place, cet exemple a fonctionné comme un champion.
la source
Comme mentionné, chrome ne le prend pas en charge. J'aime définir mes travailleurs dans le même fichier. Il s'agit d'une solution de contournement qui augmentera le nombre trouvé dans innerHTML de l'élément le
id=num
toutes les 500 ms.la source
Une raison probable est que Chrome ne vous permet pas de charger les travailleurs Web lors de l'exécution de scripts à partir d'un fichier local. Et j'essaye d'exécuter le code sur mon firefox, je ne peux pas non plus.
la source
file://
correctement dans Firefox 51.0.1Oui, cela ne fonctionnera pas dans chorome si vous chargez un fichier local. Mais cela fonctionnera bien dans le navigateur Firefox. Et vous devez ajouter le code ci-dessous dans le fichier HTML.
la source