Pracuję nad projektem, w którym jest używany pracownik sieciowy.
W mojej sekcji head mam ten kod:
var worker = new Worker("worker.js");
// More code
Działa to dobrze w Safari, ale Chrome zgłasza następujący błąd:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
Dlaczego to działa doskonale w Safari, ale nie w Chrome? Jak to naprawić?
Dziękuję Ci.
file:///E:/programming/web/project/worker.js
. Ścieżka do głównego projektu to:file:///E:/programming/web/project/index.html
.Odpowiedzi:
Chrome nie pozwala ładować pracowników sieci podczas uruchamiania skryptów z pliku lokalnego.
źródło
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
wynika , - i nie jest fajnie, aby strony internetowe mogły po prostu uzyskać dostęp do systemu plików dla kaprysu.Używam obejścia. Chrome blokuje,
Worker
ale nie<script>
. Dlatego najlepszym sposobem na stworzenie uniwersalnego rozwiązania jest:Następnie łączysz to w normalny sposób
<script src="..."
. A kiedy funkcja jest zdefiniowana, używasz tej obrzydliwości kodu:źródło
window!=seld
sprawdza, czy kod działa w programie Web Worker. To sprawia, że ten kod jest przenośny w przypadku załadowania pliku javascript bezpośrednio w innych kontekstach.Problem został odpowiednio wyjaśniony przez Noble Chicken, ale mam bardziej ogólne rozwiązanie. Zamiast instalować wamp lub xamp, za pomocą Pythona możesz przejść do folderu, w którym znajduje się twój projekt, i wpisać:
python -m http.server
Wystarczy, że będziesz miał działający serwer w tym folderze, dostępny z lokalnego hosta.
źródło
python -m SimpleHTTPServer 8000
ponieważ są załadowane <Python 3 (tylko po to, aby zapisać kolejne wyszukiwanie w Google: D)php -S localhost:8000
Możesz także użyć flagi --allow-file-access-from-files podczas uruchamiania Chrome.
Przykład dla MacOsX:
Więcej informacji: ustawienia pracownika sieci Web dla Chrome
źródło
--allow-file-access-from-files
włączoną flagą”. jak podano na stackoverflow.com/a/21771754/325418Wynika to z ograniczeń bezpieczeństwa. Zamiast tego musisz użyć protokołu
http://
lub .https://
file:///
Jeśli masz zainstalowany NodeJS, możesz po prostu wykonać następujące czynności. - Należy pamiętać, że jest to jedna z wielu dostępnych opcji
Teraz możesz go używać w dowolnym folderze, przez który chcesz uzyskać dostęp do zawartości
http
.Przejdź do
http://localhost:8000
(domyślny port: 8000)źródło
Miałem ten sam problem co twój post. Rozwiązaniem jest to, że musisz uruchomić go z localhost (wamp lub xamp). To się skończy.
źródło
Innym obejściem jest użycie serwera internetowego Google dla rozszerzenia Chrome . Wybierz katalog roboczy i uruchom serwer, Gotowe!
źródło
potrzebujesz serwera WWW do żądania z protokołu HTTP Zamiast lokalnego pliku i działa poprawnie :)
źródło
Chrome
załadować plik, ale nie można go uruchomić. UżyjFirefox
. To działa na mnie.źródło
Prostym sposobem na utworzenie lokalnego serwera HTTP w Chrome jest ta aplikacja:
Serwer sieciowy dla Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Opis:
I nie jest niezabezpieczona jako flaga --allow-file-access-from-files
źródło
Inspiruje to powyższa odpowiedź Thomasa. Ale z jednym zastrzeżeniem, że chciałem rozprowadzać tylko HTML, więc ręcznie przekonwertowałem js na dataURL . i zaznaczając w nim pole wyboru adresu URL danych.
źródło
Ponieważ Python 2.x jest szerzej wdrażany niż Python 3.x, coś podobnego
python -m SimpleHTTPServer 8000
ma szersze zastosowanie, i to nie tylko dla Mac OS X. Uważam, że jest to konieczne do użycia na przykład pod Cygwin.Mając to na miejscu, ten przykład działał jak mistrz.
źródło
Jak wspomniano, chrome go nie obsługuje. Lubię definiować moich pracowników w tym samym pliku. Jest to działające obejście, które będzie zwiększać liczbę znajdującą się w innerHTML elementu the
id=num
co 500 ms.źródło
Prawdopodobnie powodem jest to, że Chrome nie pozwala ładować pracowników sieci podczas uruchamiania skryptów z pliku lokalnego. I próbuję uruchomić kod na moim firefoxie, też nie mogę.
źródło
file://
sieciowi działają dobrze w przeglądarce Firefox 51.0.1Tak, nie będzie działać w chorome, jeśli ładujesz plik lokalny. Ale będzie działać dobrze w przeglądarce Firefox. I musisz dodać poniższy kod w pliku HTML.
źródło