Подтвердить что ты не робот

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? Как это исправить?

Спасибо.

4b9b3361

Ответ 1

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

Ответ 2

Я использую обходной путь. 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'})));

Ответ 3

Проблема была должным образом объяснена Noble Chicken, но у меня есть более общее решение. Вместо установки wamp или xamp с помощью python вы можете перейти к папке, в которой размещен ваш проект, и ввести: python -m http.server

Только это, и у вас будет работающий сервер в этой папке, доступный из localhost.

Ответ 4

При запуске Chrome вы также можете использовать флаг - разрешить доступ к файлу-доступ к файлам.

Пример для MacOsX:

/Applications/Google\ Chrome.app/Contents/MacOS/Google\ Chrome --allow-file-access-from-files

Дополнительная информация: Настройки веб-мастера для Chrome

Ответ 5

У меня была такая же проблема, как и ваш пост. Решение состоит в том, что вы должны запускать его с помощью localhost (wamp или xamp). Это будет сделано.

Ответ 6

Это из-за ограничений безопасности. Вам нужно использовать протокол http:// или https:// вместо file:///.

Если у вас установлен NodeJS, вы можете просто сделать следующее. - Обратите внимание, что это один из многих доступных вариантов

Установить локальный веб-сервер

$ npm install -g local-web-server

Теперь вы можете использовать его в любой папке, к которой вы хотите получить доступ через http.

$ ws

Перейдите по http://localhost:8000 (порт по умолчанию: 8000).

Ответ 7

вам нужен веб-сервер для запроса из протокола HTTP Вместо локального файла и правильно работать:)

Ответ 9

При более широком развертывании Python 2.x, чем Python 3.x, что-то вроде python -m SimpleHTTPServer 8000 более общеприменимо, а не только для Mac OS X. Я нашел его необходимым для использования в Cygwin, например.

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

Ответ 10

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

Ответ 11

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

Ответ 12

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 мс.

Ответ 13

Простой способ сделать локальный http-сервер в Chrome это приложение:

Веб-сервер для Chrome

https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related

Описание:

Веб-сервер для Chrome обслуживает веб-страницы из локальной папки по сети, используя HTTP. Работает в автономном режиме. Веб-сервер для Chrome - это HTTP-сервер с открытым исходным кодом (MIT) для Chrome.

Он работает везде, где у вас установлен Chrome, так что вы можете взять его где угодно. Это даже работает на хромбуках ARM.

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

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

После установки перейдите на http://127.0.0.1:8887

И это не небезопасно, так как флаг --allow-file-access-from-files

Ответ 14

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

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