2009-05-07 5 views
0

Je développe une extension Firefox basée sur this tutorial qui est une extension (deuxième partie du tutoriel est à this url)Dans XUL, comment savoir si une balise de navigateur a fini de se charger?

2,0 FF La principale chose qui est important est qu'il utilise

<iframe id="contentview" src="http://www.ibm.com/developerworks/web" flex="2"/> 

En le code de back-end, en cliquant sur le bouton GO, cela se produit:

contentview.contentDocument.location.href = urlbox.value; 

//Use Firefox XPath to get the raw text of the document 
var doctext = contentview.contentDocument.evaluate(
    "string(.)", document, null, XPathResult.STRING_TYPE, null).stringValue; 

Je reçois une erreur avec le XPath, mais ce n'est pas ma question. Le problème que j'ai avec FF 3.0 est que la valeur contentDocument fait référence à l'ancien site chargé, pas à celui chargé par le href-change. Donc, ma question est: comment puis-je créer une fenêtre similaire, mais être informé lorsque le document chargé est terminé, afin que je puisse accéder à son DOM?

Répondre

2

Mise à jour: vous devez d'abord gérer l'événement de chargement de la fenêtre, puis vous ajoutez un écouteur d'événement à l'élément iFrame

window.addEventListener("load",Listen,false); 
function Listen() 
{ 
    var frame = document.getElementById("contentview"); 
    frame.addEventListener("DOMContentLoaded", DomLoadedEventHandler, true);   
} 

    function DomLoadedEventHandler() { 
    var frame = document.getElementById("contentview"); 
    alert(frame.contentDocument.location.href); 
    } 

remplacer « DomLoadedEventHandler » avec votre nom de gestionnaire d'événements.

Je vous recommande de jeter un coup d'oeil sur le site officiel de Mozilla pour tout savoir sur les extensions Firefox

http://developer.mozilla.com

+0

ne fonctionne pas tout à fait bien. Lorsque je clique sur GO, votre code n'est pas appelé (je ne vois jamais l'alerte, je veux dire). Puis quand je regarde la console d'erreur, la première fois que je clique sur GO, rien ne se passe. La deuxième fois, je vois "doc.location is undefined". Je suppose que ce qui se passe est le même que le code d'extension d'origine: il est appelé sur la page précédente chargée? Pas celui chargé? – Tominator

+0

J'ai mis à jour ma réponse, essayez maintenant –

+0

Toujours pas 100%, mais très proche! J'ai mis votre code au même niveau que la fonction change_url (au lieu de dedans). Puis a commenté tout le code lié à cette section dans la fonction change_url bien sûr. Un problème persiste, le paramètre 'doc' est de type Event, pas Document. Plus de magie getElementById? – Tominator

Questions connexes