2009-12-31 5 views
6

So..got extension scriptable pour firefox. c'est un webspider, écrit en javascript. ce que je veux faire:extension firefox. Comment attraper l'événement onload?

je le veux charger une page, les faire un peu de travail, puis aller à une autre page (en utilisant une URL de la page chargée). Une fois la nouvelle page chargée, l'araignée effectue le même travail.

Algoritm est somelike celui-ci:

  1. attendre jusqu'à ce que la page est chargée
  2. faire un certain travail
  3. choisir une autre url
  4. aller à cette url
  5. goto 1.

en m fonction y principale que je fais ce code:

gBrowser.addEventListener("DOMContentLoaded",haXahv8, false); 

et tout fonctionne bien jusqu'à ce que je vais à une autre page ... Comment puis-je réutiliser dans mon cas DOMContentLoaded extension Firefox? Donc, la question est: est-il possible de réutiliser load/DOMContentLoaded event dans firefox extention pour différentes pages? si oui alors comment? Plus tôt, je résolvais ce problème, avec windows forms et webbrowser + C++ ... ooh, quel temps c'était ... un rêve! parce que tout a bien fonctionné =)

Répondre

11

Vous ne devriez vous inscrire à l'événement qu'une seule fois, et vous devriez le recevoir à chaque fois qu'un onglet du navigateur le déclenche.

Votre code devrait fonctionner correctement, à condition que vous attendiez que la fenêtre XUL déclenche son événement load avant d'ajouter un écouteur d'événement à l'élément gBrowser. Si vous ajoutez un écouteur d'événement avant cela, gBrowser n'est pas encore initialisé et le comportement n'est pas défini.

Voici un exemple:

window.addEventListener('load', function() { 
    gBrowser.addEventListener('DOMContentLoaded', function() { 
     // stuff that happens for each web page load goes here 
    }, false); 
}, false); 

Notez que, dans la pratique, je ne peux être sûr que cela fonctionne avec Firefox 3.5 et plus. J'ai écrit une extension (interne à mon entreprise) qui fait ce genre de chose de façon fiable pour Firefox 1.5 à 3.5, mais c'est malheureusement un peu plus compliqué (et heureusement) beaucoup plus robuste que la solution ci-dessus. Si vous avez besoin de support pour plus de Firefox 3.5+, faites le moi savoir et je vous fournirai plus d'informations.

Voici quelques lectures supplémentaires:

2

Le dernier paramètre de la méthode addEventListener() qui dans votre cas est réglé sur "false" doit être défini sur true, cela indique au navigateur de déclencher votre eventhandler à chaque fois que l'événement a lieu.

La valeur actuelle false indique uniquement que votre gestionnaire doit être déclenché la première fois que l'événement a lieu. J'espère avoir sauvé certains d'entre vous quelque temps, il m'a fallu un certain temps pour faire des recherches dans les pages Document Object Model Events sur W3C.!!

Questions connexes