web-dev-qa-db-fra.com

Uncaught ReferenceError: importScripts n'est pas défini

Pourquoi est-ce que je continue à recevoir cette erreur?

Je devrais pouvoir utiliser cette fonction globale non?

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

J'utilise du chrome.

J'utilise https://code.google.com/p/bitjs/ et cela commence par

importScripts('io.js');
importScripts('archive.js');
28
netigger

Ce code doit être à l'intérieur d'un script de travail. Le travailleur lui-même est créé via un nouvel objet Worker - voir Mise en route dans le tutoriel .

Le code que vous avez lié est à l'intérieur du travailleur créé ici .

18
Bergi

Lorsque vous créez un travailleur, il est en fait exécuté deux fois. La première passe se situe dans le contexte de l'objet global "fenêtre" (ce qui signifie que vous avez accès à toutes les fonctions de l'objet fenêtre). Le deuxième appel est dans le contexte du travailleur qui a un objet global différent, celui où 'importScripts' existe.

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

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

Notez que addEventListener est à l'intérieur de l'instruction if. Si vous le placez en dehors de celui-ci, votre rappel sera enregistré deux fois. Une fois sur la 'fenêtre' globale et une fois sur la globale du travailleur.

Bon codage!

29
SJ Anderson

J'ai également rencontré cette erreur. Dans mon cas, c'est parce que je teste le code en utilisant Karma/Jasmine. En raison de la structure de test, le fichier worker.js est également chargé par le thread principal.

J'ai évité cette erreur en enveloppant le fichier worker.js avec:

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

Veuillez vous référer au commentaire ci-dessous de Rob, qui propose une solution alternative.

10
gm2008