Chrome не может загрузить web worker
Я работаю над проектом, который использует веб-работника.
в моей голове в разделе у меня есть этот код:
var worker = new Worker("worker.js");
// More code
это прекрасно работает в Safari, но Chrome сообщает о следующей ошибке:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
почему это прекрасно работает в Safari, но не Chrome? Как мне это исправить?
спасибо.
12 ответов:
я использую обходной путь. Хромированные блоки
Worker
а не<script>
. Следовательно, лучший способ сделать универсальное решение заключается в следующем: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();
затем вы связываете его как обычно
<script src="..."
. И как только функция определена, вы используете эту мерзость кода:new Worker(URL.createObjectURL(new Blob(["("+worker_function.toString()+")()"], {type: 'text/javascript'})));
проблема была правильно объяснена благородным цыпленком, но у меня есть более общее решение для нее. Вместо установки wamp или xamp с помощью python вы можете перейти к папке, в которой размещен ваш проект, и ввести:
python -m http.server
только это, и у вас будет работающий сервер в этой папке, доступный из localhost.
вы также можете использовать --allow-file-access-from-files флаг при запуске Chrome.
пример для MacOsX:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
Подробнее : настройки веб-работника для chrome
У меня была такая же проблема, как ваш пост тоже. Решение заключается в том, что вы должны запустить его с localhost (wamp или xamp). Это будет сделано.
это из-за ограничений безопасности. Вы должны использовать
http://
илиhttps://
протокол вместоfile:///
.если у вас установлен NodeJS, вы можете просто сделать следующее. - обратите внимание, что это один из многих вариантов, доступных
установить local-web-server
$ npm install -g local-web-server
теперь вы можете использовать его в любой папке, которую вы хотите получить доступ к содержимому через
http
.$ ws
перейти к
http://localhost:8000
(порт по умолчанию: 8000)
С Python 2.x более широко развернут, чем Python 3.х, что-то вроде
python -m SimpleHTTPServer 8000
более широко применяется, и не только для Mac OS X. Я нашел его необходимым для использования под Cygwin, например.С этим на месте, работал как чемпион.
еще один обходной путь-использовать Google веб-сервер для Chrome