2013-01-24 8 views
21

이 오류가 계속 발생하는 이유는 무엇입니까?잡히지 않은 ReferenceError : importScripts가 정의되지 않았습니다.

이 전역 기능을 올바르게 사용할 수 있어야합니까? 내가 크롬을 사용하고

http://www.html5rocks.com/en/tutorials/workers/basics/

.

나는 https://code.google.com/p/bitjs/를 사용하고 있는데이 코드는 작업자 스크립트 내에서 할 필요가

importScripts('io.js'); 
importScripts('archive.js'); 
+0

어떻게 작업자를 생성합니까? – Bergi

+0

이것이 노동자를 부추 긴다고 생각 했나요? https://code.google.com/p/bitjs/source/browse/unzip.js – netigger

+0

에서 사용하는 방법입니다. 아니요, 작업자 스크립트 안에 있어야합니다. 방법은 https://code.google.com/p/bitjs/source/browse/archive.js#278에서 확인하거나 링크 된 자습서를 따르십시오. – Bergi

답변

6

이 오류가 발생했습니다. 제 경우에는 Karma/Jasmine을 사용하여 코드를 테스트하기 때문입니다. 테스트 프레임 워크로 인해 worker.js 파일은 주 스레드에 의해로드됩니다.

if('undefined' === typeof window){ 
     importScripts('workerscript2.js'); 
    ... 
    } 

대안 솔루션을 제공 롭 아래의 주석을 참조하십시오

나는 함께 worker.js 파일을 wrappig하여이 오류를 피할.

+0

이것은 재스민을 사용할 때 영리한 해결 방법입니다. +1 – Liam

+4

대신 ''function '=== typeof importScripts'를 사용해보십시오. –

20

작업자를 만들면 실제로 두 번 실행됩니다. 첫 번째 패스는 전역 'window'객체의 컨텍스트에 있습니다. 즉, 모든 윈도우 객체 함수에 액세스 할 수 있습니다. 두 번째 호출은 다른 전역 개체가있는 작업자의 컨텍스트에 있으며 'importScripts'가있는 작업자입니다.

// proper initialization 
if('function' === typeof importScripts) { 
    importScripts('script2.js'); 
    addEventListener('message', onMessage); 

    function onMessage(e) { 
    // do some work here 
    }  
} 

addEventListener는 if 문 안에 있습니다. 당신이 그것의 외부에 배치하면 콜백은 두 번 등록됩니다. 한 번은 글로벌 '창'에, 한 번은 작업자의 글로벌에.

해피 코딩!

+3

답변이 의미가 있습니다. 2 번 실행에 대한 자세한 내용을 알기 위해 몇 가지 링크를 가르쳐 주시겠습니까? – lokeshjain2008

관련 문제