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에서는 로컬 파일에서 사용할 수 없습니다.
해결 방법을 사용합니다. 크롬 차단은 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- 파일에서-파일 은 크롬을 액세스 할 때 플래그를 사용할 수 있습니다 .
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)로 실행해야한다는 것입니다. 완료됩니다.
로컬 파일 대신 HTTP 프로토콜의 요청을 위해 웹 서버가 필요하며 작동합니다. :)
Chrome
파일을로드 할 수 없습니다. 사용 Firefox
. 그것은 나를 위해 일하고 있습니다.
또 다른 해결 방법은 Chrome 확장 프로그램에 Google의 웹 서버를 사용하는 것 입니다. 작업 디렉토리를 선택하고 서버를 시작하십시오. 완료!
파이썬 2.X가 파이썬 3.x를보다 더 널리 배포됨에 따라 python -m SimpleHTTPServer 8000
맥 OS X 아니라뿐만 비슷한 것이 더 일반적으로 적용됩니다. 예를 들어 Cygwin에서 사용하는 데 필요하다는 것을 알았습니다.
장소에두고, 이 예는 챔피언처럼 일했다.
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;
}
언급했듯이 크롬은 그것을 지원하지 않습니다. 동일한 파일에 내 작업자를 정의하고 싶습니다. 이것은 id=num
500ms마다 요소의 innerHTML에서 발견되는 수를 증가시키는 작업 해결 방법입니다 .
크롬에서 로컬 http 서버 를 만드는 쉬운 방법 은 다음과 같습니다.
Chrome 용 웹 서버
기술:
Chrome 용 웹 서버는 HTTP를 사용하여 네트워크를 통해 로컬 폴더의 웹 페이지를 제공합니다. 오프라인으로 실행됩니다. Chrome 용 웹 서버는 Chrome 용 오픈 소스 (MIT) HTTP 서버입니다.
Chrome이 설치된 모든 곳에서 실행되므로 어디로 든 가져갈 수 있습니다. ARM 크롬 북에서도 작동합니다.
이제 다른 컴퓨터가 파일에 액세스 할 수 있도록 로컬 네트워크에서 수신하는 옵션이 있습니다. 또한 인터넷 주소를 얻으려고 시도 할 수 있습니다.
많은 사람들이 이것을 사용하여 크롬 북에서 기본적인 웹 개발을합니다. 또한 컴퓨터간에 로컬 네트워크를 통해 또는 인터넷에서 파일을 공유 할 때도 편리합니다.
설치 한 후 http://127.0.0.1:8887로 이동합니다.
그리고 --allow-file-access-from-files 플래그로 안전하지 않습니다.
아마도 이유는 크롬이 로컬 파일에서 스크립트를 실행할 때 웹 워커를로드 할 수 없도록하기 때문입니다. 그리고 내 파이어 폭스에서 코드를 실행하려고 시도합니다.
예, 로컬 파일을로드하는 경우 chorome에서 작동하지 않습니다. 그러나 firefox 브라우저에서는 잘 작동합니다. 그리고 HTML 파일에 아래 코드를 추가해야합니다.
<head>
<meta charset="UTF-8" />
</head>
참고 URL : https://stackoverflow.com/questions/21408510/chrome-cant-load-web-worker
'IT' 카테고리의 다른 글
CMake를 사용하여 C ++ 프로그램을 Boost와 연결하는 방법 (0) | 2020.08.20 |
---|---|
Ruby Strings의 gsub 메소드와 하위 메소드의 차이점은 무엇입니까? (0) | 2020.08.20 |
클래스 이름으로 하위 요소를 얻는 방법은 무엇입니까? (0) | 2020.08.20 |
ASP.NET에서 Excel 파일 생성 (0) | 2020.08.20 |
entitymanager가 어디에 있습니까? (0) | 2020.08.20 |