Estou trabalhando em um projeto que usa um trabalhador da web.
Na minha seção principal, tenho este código:
var worker = new Worker("worker.js");
// More code
Isso funciona bem no Safari, mas o Chrome relata o seguinte erro:
Uncaught SecurityError: Failed to create a worker: script at '(path)/worker.js' cannot be accessed from origin 'null'.
Por que isso funciona perfeitamente no Safari, mas não no Chrome? Como faço para corrigir isso?
Obrigado.
file:///E:/programming/web/project/worker.js
. O caminho para o projeto principal é esta:file:///E:/programming/web/project/index.html
.Respostas:
O Chrome não permite que você carregue web workers ao executar scripts de um arquivo local.
fonte
Loading a local file, even with a relative URL, is the same as loading a file with the file: protocol.
- e não é legal para as páginas da web acessarem seu sistema de arquivos por capricho.Eu uso uma solução alternativa. O Chrome bloqueia,
Worker
mas não<script>
. Portanto, a melhor maneira de fazer uma solução universal é esta:Você então o vincula normalmente
<script src="..."
. E uma vez que a função é definida, você usa esta abominação de um código:fonte
window!=seld
verifica se o código está sendo executado no web worker. Isso torna este código portátil no caso de você carregar o arquivo javascript diretamente em outros contextos.O problema foi devidamente explicado pela Noble Chicken, mas tenho uma solução mais geral para ele. Em vez de instalar o wamp ou o xamp, com o python você pode navegar até a pasta em que seu projeto está hospedado e digitar:
python -m http.server
Apenas isso e você terá um servidor em execução nessa pasta, acessível a partir de localhost.
fonte
python -m SimpleHTTPServer 8000
carregados com o <Python 3 (apenas para salvar outra pesquisa do Google: D)php -S localhost:8000
Você também pode usar o sinalizador --allow-file-access-from-files ao iniciar o Chrome.
Exemplo para MacOsX:
Mais informações: configurações do Web worker para Chrome
fonte
--allow-file-access-from-files
bandeira ativada." conforme indicado em stackoverflow.com/a/21771754/325418É por causa das restrições de segurança. Você precisa usar o protocolo
http://
ou emhttps://
vez defile:///
.Se você tiver o NodeJS instalado, pode simplesmente fazer o seguinte. - Observe que esta é uma das muitas opções disponíveis
Agora você pode usá-lo em qualquer pasta através da qual deseja acessar o conteúdo
http
.Navegue até
http://localhost:8000
(porta padrão: 8000)fonte
Eu tive o mesmo problema que sua postagem também. A solução é executá-lo com localhost (wamp ou xamp). Vai ser feito.
fonte
Outra solução alternativa é usar o servidor da web do Google para a extensão do Chrome . Escolha seu diretório de trabalho e inicie o servidor, Pronto!
fonte
você precisa de um servidor web para solicitação de protocolo HTTP em vez de arquivo local e funcione corretamente :)
fonte
Chrome
carregar o arquivo, mas não pode executá-lo. UseFirefox
. Está funcionando para mim.fonte
Uma maneira fácil de criar um servidor http local no Chrome é este aplicativo:
Servidor Web para Chrome
https://chrome.google.com/webstore/detail/web-server-for-chrome/ofhbbkphhbklhfoeikjpcbhemlocgigb/related
Descrição:
E não é inseguro como sinalizador --allow-file-access-from-files
fonte
Isso é inspirado na resposta de Thomas acima. Mas com uma ressalva de que eu queria distribuir apenas o HTML, então converti manualmente o js em dataURL . e habilitando a caixa de seleção URL de dados nele.
fonte
Com o Python 2.x sendo implementado de forma mais ampla do que o Python 3.x, algo como
python -m SimpleHTTPServer 8000
é mais geralmente aplicável, e não apenas para Mac OS X. Eu achei necessário para uso no Cygwin, por exemplo.Com isso em vigor, este exemplo funcionou como um campeão.
fonte
Como mencionado, o cromo não o suporta. Gosto de definir meus trabalhadores no mesmo arquivo. Esta é uma solução alternativa que aumentará o número encontrado no innerHTML do elemento a
id=num
cada 500 ms.fonte
Provavelmente, o cromo não permite que você carregue web workers ao executar scripts de um arquivo local. E tento executar o código no meu firefox, também não consigo.
fonte
file://
no Firefox 51.0.1Sim, não funcionará em chorome se você estiver carregando um arquivo local. Mas funcionará bem no navegador firefox. E você tem que adicionar o código abaixo no arquivo HTML.
fonte