IT

Chrome에서 웹 포장을로드 할 수 없습니다.

lottoking 2020. 8. 20. 19:06
반응형

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=num500ms마다 요소의 innerHTML에서 발견되는 수를 증가시키는 작업 해결 방법입니다 .


크롬에서 로컬 http 서버 를 만드는 쉬운 방법 은 다음과 같습니다.

Chrome 용 웹 서버

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

기술:

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

반응형