Bonjour,

Je travaille sur une extension firefox (qui est une sorte de password manager).
J'exécute une fonction d'une dll au chargement d'une nouvelle page (onglet) pour certaines url seulement. Cette fonction fait plusieurs secondes pour me retourner une valeur. Pour éviter de freezer le browser, j'exécute cette fonction dans un thread en background. Suivant la valeur retournée, je remplis un champ dans la page. Cela marche bien pour le chargement d'une page unique.
Voici le code.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
window.addEventListener("load", function () { gBrowser.addEventListener("load", myObject.onPageLoad, true); },   false);
var myObject= {
   onPageLoad: function(event){
      if (event.originalTarget instanceof HTMLDocument) {
         var doc = event.originalTarget;
         var win = doc.defaultView;
 
         // Wait for the main event to fire.
         if (win.frameElement)
            return;
         else {
            //do my process in a background thread
            // ... 
           //then return the value (returnedValue) and I want to fill a field in the page
           doc.getElementById(idPassField).value="returnedValue";
         }
      }
   }
}
J'ai maintenant un problème lorsque plusieurs pages se chargent simultanément (par exemple lorsqu'on rouvre firefox en ayant sauver les onglets).

Dans la traitement de la fonction de ma dll, je détecte qu'un processus est déjà en cours (en utilisant la mémoire partagée) et je peux arrêter un nouveau traitement. Ainsi, si le traitement se lance dans un second onglet, il s'arrète et le premier continu dans le premier onglet. Le problème vient en fait que je ne puis plus travailler sur mon premier onglet. (Je ne parviens plus à remplir le champ dans mon premier onglet).

var doc = event.originalTarget prend la valeur du contenu du second onglet, donc quand je fais doc.getElementById(idPassField).value j'ai une erreur.

Comment y remédier?

Merci d'avance si qqn a une idée