[javascript] 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에서 연결할 수 있습니다.


답변

–allow-file-access-from-files를 사용할 수도 있습니다. 은 크롬을 시작할 때 플래그를.

MacOsX의 예 :

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

추가 정보 : Chrome 용 웹 작업자 설정


답변

보안 제한 때문입니다. 대신 사용 http://하거나 https://프로토콜 을 사용해야 합니다.file:/// .

NodeJS가 설치되어있는 경우 다음을 수행하면됩니다.
-이것은 사용 가능한 많은 옵션 중 하나입니다.

로컬 웹 서버 설치

$ npm install -g local-web-server

이제를 통해 콘텐츠에 액세스하려는 모든 폴더에서 사용할 수 있습니다 http.

$ ws

http://localhost:8000(기본 포트 : 8000)으로 이동합니다 .


답변

나는 당신의 게시물과 같은 문제가 있었다. 해결책은 localhost (wamp 또는 xamp)로 실행해야한다는 것입니다. 완료됩니다.


답변

또 다른 해결 방법은 Chrome 확장 프로그램에 Google의 웹 서버를 사용하는 것 입니다. 작업 디렉토리를 선택하고 서버를 시작하십시오. 완료!