Question

J'écris une extension Firefox à l'aide du générateur de modules complémentaires et du SDK complémentaire.Jusqu'à présent, j'ai pu contourner toutes les limitations sans passer à XUL.Mais je me suis heurté à un obstacle.

Mon extension a un processus long, qui peut se bloquer, je dois donc séparer ce traitement du thread principal de l'interface utilisateur.j'ai lu la question ici, mais cela ne répond pas tout à fait à ma question.Les Web Workers ne suffisent pas car le long processus nécessite l'accès aux js-ctypes et au code natif.Il semblerait donc que ChromeWorker pourrait faire l'affaire.Mais je ne sais pas comment y accéder depuis le générateur de modules complémentaires.De plus, le Thread Manager n'est accessible que via le code C++.Comment puis-je :

  1. Accéder et instancier Chrome Workers (ou)
  2. Créer des discussions (ou)
  3. Fausse concurrence (en quelque sorte)

pour éviter de bloquer le thread de l'interface utilisateur.Alternativement, je pourrais créer le mien en code natif (ce que j'essaie d'éviter).

Était-ce utile?

La solution

Vous devriez utiliser des Chrome Workers, ils sont spécifiquement destinés à utiliser js-ctypes sur un thread différent.Le gestionnaire de threads a des problèmes et son utilisation à partir de JavaScript a été interdite pour une raison.Le principal problème est cependant que ChromeWorker Le constructeur n'est pas exposé dans les modules du SDK complémentaire.Mais vous pouvez l'obtenir auprès du chrome pseudo-module :

var self = require("sdk/self");
var {ChromeWorker} = require("chrome");
var worker = new ChromeWorker(self.data.url("worker.js"));

Cela ne fonctionne qu'à partir de Firefox 8, dans les versions antérieures, vous le feriez utiliser l'usine ouvrière.Mais je suppose que vous n'en avez pas besoin - les nouvelles versions du SDK complémentaire ne prennent de toute façon rien en charge sous Firefox 9.

Note:Vous devez vous assurer d'arrêter ce travailleur si votre module complémentaire est désactivé ou désinstallé (par ex.en utilisant unload module), cela ne se fera pas automatiquement.

Modifier:Matthew Ruttley décrit une approche plus simple pour importer des travailleurs Chrome dans son article de blog détaillé, j'ai mis à jour cette réponse en conséquence.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top