Ich arbeite an einem Projekt, das einen Web-Worker verwendet.
In meinem Kopfbereich habe ich diesen Code:
var worker = new Worker("worker.js");
// More code
Dies funktioniert in Safari einwandfrei, Chrome meldet jedoch den folgenden Fehler:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
Warum funktioniert das in Safari perfekt, aber nicht in Chrome? Wie behebe ich das?
Danke dir.
file:///E:/programming/web/project/worker.js
. Der Pfad für das Hauptprojekt lautet :file:///E:/programming/web/project/index.html
.Antworten:
In Chrome können Sie keine Web-Worker laden, wenn Sie Skripts aus einer lokalen Datei ausführen.
quelle
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
dass Webseiten nicht einfach aus einer Laune heraus auf Ihr Dateisystem zugreifen können.Ich verwende eine Problemumgehung. Chrome blockiert
Worker
aber nicht<script>
. Daher ist der beste Weg, eine universelle Lösung zu finden, folgender:Sie verknüpfen es dann wie gewohnt
<script src="..."
. Und sobald die Funktion definiert ist, verwenden Sie diesen Gräuel eines Codes:quelle
window!=seld
prüft, ob der Code im Web Worker ausgeführt wird. Dies macht diesen Code portabel, falls Sie die Javascript-Datei direkt in anderen Kontexten laden.Das Problem wurde von Noble Chicken richtig erklärt, aber ich habe eine allgemeinere Lösung dafür. Anstatt wamp oder xamp zu installieren, können Sie mit Python zu dem Ordner navigieren, in dem Ihr Projekt gehostet wird, und Folgendes eingeben:
python -m http.server
Genau das und Sie haben einen laufenden Server in diesem Ordner, der von localhost aus erreichbar ist.
quelle
python -m SimpleHTTPServer 8000
da sie mit <Python 3 geladen sind (nur um eine weitere Google-Suche zu speichern: D)php -S localhost:8000
Sie können beim Starten von Chrome auch das Flag --allow-file-access-from-files verwenden.
Beispiel für MacOsX:
Weitere Informationen: Web Worker-Einstellungen für Chrome
quelle
--allow-file-access-from-files
aktiviertem Flag öffnen können ." wie auf stackoverflow.com/a/21771754/325418 angegebenDies liegt an den Sicherheitsbeschränkungen. Sie müssen stattdessen
http://
oderhttps://
protokollierenfile:///
.Wenn Sie NodeJS installiert haben, können Sie einfach Folgendes tun. - Beachten Sie, dass dies eine von vielen verfügbaren Optionen ist
Jetzt können Sie es in jedem Ordner verwenden, über den Sie auf den Inhalt zugreifen möchten
http
.Navigieren Sie zu
http://localhost:8000
(Standardport: 8000)quelle
Ich hatte das gleiche Problem wie Ihr Beitrag. Die Lösung ist, dass Sie es mit localhost (wamp oder xamp) ausführen müssen. Es wird getan.
quelle
Eine weitere Problemumgehung ist die Verwendung des Google- Webservers für die Chrome- Erweiterung. Wählen Sie Ihr Arbeitsverzeichnis und starten Sie den Server. Fertig!
quelle
Sie benötigen einen Webserver für die Anforderung vom HTTP-Protokoll anstelle der lokalen Datei und arbeiten ordnungsgemäß :)
quelle
Chrome
Laden Sie die Datei, können Sie sie jedoch nicht ausführen. Verwenden SieFirefox
. Es funktioniert für mich.quelle
Diese App bietet eine einfache Möglichkeit, einen lokalen http-Server in Chrome zu erstellen:
Webserver für Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Beschreibung:
Und es ist nicht unsicher als Flag --allow-file-access-from-files
quelle
Dies ist inspiriert von Thomas Antwort oben. Aber mit einer Einschränkung, dass ich nur den HTML- Code verteilen wollte, habe ich die js manuell in dataURL konvertiert . und Aktivieren des Kontrollkästchens Daten-URL.
quelle
Da Python 2.x weiter verbreitet ist als Python 3.x,
python -m SimpleHTTPServer 8000
ist so etwas allgemeiner anwendbar, und zwar nicht nur für Mac OS X. Ich fand es beispielsweise für die Verwendung unter Cygwin erforderlich.Damit funktionierte dieses Beispiel wie ein Champion.
quelle
Wie bereits erwähnt, unterstützt Chrom dies nicht. Ich definiere meine Mitarbeiter gerne in derselben Datei. Dies ist eine funktionierende Problemumgehung, bei der die Anzahl der in innerHTML des Elements gefundenen Elemente
id=num
alle 500 ms erhöht wird.quelle
Ein wahrscheinlicher Grund ist, dass Sie mit Chrome keine Web-Worker laden können, wenn Sie Skripte aus einer lokalen Datei ausführen. Und ich versuche den Code auf meinem Firefox auszuführen, kann auch nicht.
quelle
file://
in Firefox 51.0.1Ja, es funktioniert nicht im Chorom, wenn Sie eine lokale Datei laden. Aber es wird gut in Firefox-Browser funktionieren. Und Sie müssen den folgenden Code in die HTML-Datei einfügen.
quelle