Я работаю над проектом, в котором используется веб-воркер.
В моем разделе головы у меня есть этот код:
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? Как это исправить?
Спасибо.
file:///E:/programming/web/project/worker.js
. Путь для основного проекта заключается в следующем:file:///E:/programming/web/project/index.html
.Ответы:
Chrome не позволяет загружать веб-воркеров при запуске скриптов из локального файла.
источник
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
- и это не круто для веб - страниц , чтобы быть в состоянии только доступа файловой системы по наитию.Я использую обходной путь. Хром блокирует,
Worker
но нет<script>
. Следовательно, лучший способ сделать универсальное решение - это:Затем вы связываете его как обычно
<script src="..."
. И как только функция определена, вы используете эту мерзость кода:источник
window!=seld
проверяет, работает ли код в веб-воркере. Это делает этот код переносимым, если вы загружаете файл javascript непосредственно в другом контексте.Проблема была правильно объяснена Noble Chicken, но у меня есть более общее решение. Вместо установки wamp или xamp с помощью python вы можете перейти к папке, в которой размещен ваш проект, и ввести:
python -m http.server
Только это, и у вас будет работающий сервер в этой папке, доступный с localhost.
источник
python -m SimpleHTTPServer 8000
поскольку они загружены с <Python 3 (просто чтобы сохранить еще один поиск в Google: D)php -S localhost:8000
Вы также можете использовать флаг --allow-file-access-from-files при запуске Chrome.
Пример для MacOsX:
Дополнительная информация: настройки веб-воркера для Chrome
источник
--allow-file-access-from-files
флажком». как указано на stackoverflow.com/a/21771754/325418Это из-за ограничений безопасности. Вам нужно использовать
http://
илиhttps://
протокол вместоfile:///
.Если у вас установлен NodeJS, вы можете просто сделать следующее. - Обратите внимание, что это один из многих доступных вариантов
Теперь вы можете использовать его в любой папке, через которую хотите получить доступ к содержимому
http
.Перейдите к
http://localhost:8000
(порт по умолчанию: 8000)источник
У меня была та же проблема, что и у вашего сообщения. Решение в том, что вам нужно запустить его с помощью localhost (wamp или xamp). Будет сделано.
источник
Другой обходной путь - использовать веб-сервер Google для расширения Chrome . Выберите рабочий каталог и запустите сервер. Готово!
источник
вам нужен веб-сервер для запроса по протоколу HTTP вместо локального файла и работает правильно :)
источник
Chrome
загрузить файл, но не может его запустить. ИспользуйтеFirefox
. У меня это работает.источник
Простой способ сделать локальный http-сервер в Chrome - это приложение:
Веб-сервер для Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Описание:
И это небезопасно, поскольку флаг --allow-file-access-from-files
источник
Это вдохновлено ответом Томаса выше. Но с одной оговоркой, что я хотел распространять только HTML, поэтому я вручную преобразовал js в dataURL . и установите в нем флажок URL-адреса данных.
источник
Поскольку Python 2.x используется более широко, чем Python 3.x, что-то вроде
python -m SimpleHTTPServer 8000
более широко применимо, и не только для Mac OS X. Я счел это необходимым для использования, например, в Cygwin.С учетом этого, этот пример работал как чемпион.
источник
Как уже упоминалось, хром не поддерживает его. Мне нравится определять своих воркеров в одном файле. Это рабочий обходной путь, который будет увеличивать число в innerHTML элемента
id=num
каждые 500 мс.источник
Вероятно, причина в том, что Chrome не позволяет загружать веб-воркеров при запуске скриптов из локального файла. И я пытаюсь запустить код на моем firefox, тоже не могу.
источник
file://
воркеры отлично работают в Firefox 51.0.1Да, это не будет работать в chorome, если вы загружаете локальный файл. Но в браузере firefox он будет работать нормально. И вы должны добавить код ниже в файл HTML.
источник