Ответ 1
Chrome не позволяет загружать веб-работников при запуске скриптов из локального файла.
Я работаю над проектом, который использует веб-сотрудника.
В моей голове у меня есть этот код:
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? Как это исправить?
Спасибо.
Chrome не позволяет загружать веб-работников при запуске скриптов из локального файла.
Я использую обходной путь. 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'})));
Проблема была должным образом объяснена Noble Chicken, но у меня есть более общее решение. Вместо установки wamp или xamp с помощью python вы можете перейти к папке, в которой размещен ваш проект, и ввести: python -m http.server
Только это, и у вас будет работающий сервер в этой папке, доступный из localhost.
При запуске Chrome вы также можете использовать флаг - разрешить доступ к файлу-доступ к файлам.
Пример для MacOsX:
/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files
Дополнительная информация: Настройки веб-мастера для Chrome
У меня была такая же проблема, как и ваш пост. Решение состоит в том, что вы должны запускать его с помощью localhost (wamp или xamp). Это будет сделано.
Это из-за ограничений безопасности. Вам нужно использовать протокол http://
или https://
вместо file:///
.
Если у вас установлен NodeJS, вы можете просто сделать следующее. - Обратите внимание, что это один из многих доступных вариантов
Установить локальный веб-сервер
$ npm install -g local-web-server
Теперь вы можете использовать его в любой папке, к которой вы хотите получить доступ через http
.
$ ws
Перейдите по http://localhost:8000
(порт по умолчанию: 8000).
вам нужен веб-сервер для запроса из протокола HTTP Вместо локального файла и правильно работать:)
Другим обходным решением является использование Google веб-сервера для расширения Chrome. Выберите рабочий каталог и запустите сервер, Done!
При более широком развертывании Python 2.x, чем Python 3.x, что-то вроде python -m SimpleHTTPServer 8000
более общеприменимо, а не только для Mac OS X. Я нашел его необходимым для использования в Cygwin, например.
С этим на месте этот пример работал как чемпион.
Chrome
загружает файл, но не может его запустить. Используйте Firefox
. Это работает для меня.
Вероятно, причина в том, что хром не позволяет загружать веб-работников при запуске скриптов из локального файла. И я пытаюсь запустить код на моем firefox, не могу.
function worker_fun(num){
num ++
// console.log(num)
postMessage(num);
setTimeout(worker_fun.bind(null,num), 500)
}
var w
function startWorker(){
var blob = new Blob([
"onmessage = function(e){\
" + worker_fun.toString() + "\
worker_fun(e.data.num);}"
]);
var blobURL = window.URL.createObjectURL(blob);
if (typeof(Worker) != 'undefined'){
if (typeof(w) == 'undefined'){
w = new Worker(blobURL);
w.onmessage = function(event){
document.getElementById('num').innerHTML = event.data;
}
w.postMessage({
num:parseInt(document.getElementById('num').innerHTML)})
}
}
}
function stopWorker() {
w.terminate();
w = undefined;
}
Как уже упоминалось, хром не поддерживает его. Мне нравится определять моих работников в одном файле. Это рабочий обходной путь, который будет увеличивать число, найденное во innerHTML элемента, с id=num
каждые 500 мс.
Простой способ сделать локальный http-сервер в Chrome это приложение:
Веб-сервер для Chrome
Описание:
Веб-сервер для Chrome обслуживает веб-страницы из локальной папки по сети, используя HTTP. Работает в автономном режиме. Веб-сервер для Chrome - это HTTP-сервер с открытым исходным кодом (MIT) для Chrome.
Он работает везде, где у вас установлен Chrome, так что вы можете взять его где угодно. Это даже работает на хромбуках ARM.
Теперь у него есть возможность прослушивания в локальной сети, чтобы другие компьютеры могли получить доступ к вашим файлам. Кроме того, он может попытаться получить интернет-адрес.
Многие люди используют это, чтобы сделать основные веб-разработки на Chromebook. Это также удобно для обмена файлами по локальной сети между компьютерами или даже в Интернете.
После установки перейдите на http://127.0.0.1:8887
И это не небезопасно, так как флаг --allow-file-access-from-files
Да, он не будет работать в chorome, если вы загружаете локальный файл. Но он отлично работает в браузере Firefox. И вы должны добавить код ниже в HTML файл.
<head>
<meta charset="UTF-8" />
</head>