웹 작업자를 사용하는 프로젝트를 진행 중입니다.
내 머리 부분에는이 코드가 있습니다.
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)으로 이동합니다 .