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 80

12 ответов:

Chrome не позволяет загружать веб-работников при запуске сценариев из локального файла.

я использую обходной путь. Хромированные блоки 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 вместо локального файла и правильно :)

это из-за ограничений безопасности. Вы должны использовать 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, например.

С этим на месте, работал как чемпион.

Chrome загрузите файл, но не можете его запустить. Используйте Firefox. Это работает на меня.

еще один обходной путь-использовать Google веб-сервер для Chrome

вероятно, причина в том, что chrome не позволяет загружать веб-работников при запуске сценариев из локального файла. И я пытаюсь запустить код на моем firefox, тоже не могу.

Да, он не будет работать в chorome, если вы загружаете локальный файл. Но он будет отлично работать в браузере firefox. И вы должны добавить ниже код в HTML-файл.

<head>
    <meta charset="UTF-8" />
</head>