2009-05-07 3 views
0

ich eine Firefox-Erweiterung auf this tutorial Basis zu entwickeln, die ein FF 2.0 Verlängerung (zweiter Teil des Tutorials ist bei this url)Wie kann ich in XUL wissen, dass ein Browser-Tag geladen wurde?

Die Hauptsache ist, was wichtig ist, ist, dass es

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

verwendet in der Back-End-Code, wenn die START-Taste klicken, geschieht dies:

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; 

ich einen Fehler mit dem XPath bekommen, aber das ist nicht meine Frage. Das Problem, das ich mit FF 3.0 habe, ist, dass der contentDocument-Wert sich auf die alte geladene Seite bezieht, nicht auf die, die von der href-change geladen wurde.

Also meine Frage ist: Wie kann ich ein ähnliches Fenster erstellen, aber jemand benachrichtigt werden, wenn das geladene Dokument abgeschlossen ist, damit ich auf seine DOM zugreifen kann?

Antwort

2

Aktualisiert: müssen Sie zuerst das Ladeereignis des Fensters zu handhaben dann Sie einen Ereignis-Listener

zum iframe Elemente hinzufügen
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); 
    } 

ersetzen "DomLoadedEventHandler" mit Ihrem Event-Handler-Namen.

ich empfehlen, dass Sie auf der offiziellen Seite von Mozilla einen Blick alles Erweiterungen über Firefox

arbeiten

http://developer.mozilla.com

+0

nicht vollständig obwohl zu lernen. Wenn ich auf GO klicke, wird Ihr Code nicht aufgerufen (ich sehe die Warnung nie, meine ich). Wenn ich dann auf die Fehlerkonsole klicke, passiert beim ersten Klicken auf GO nichts. Zum zweiten Mal sehe ich "doc.location is undefined". Ich vermute, was passiert, ist gleich wie der ursprüngliche Erweiterungscode: Es wird auf der vorherigen geladenen Seite aufgerufen? Nicht derjenige, der geladen wird? – Tominator

+0

Ich habe meine Antwort aktualisiert, versuchen Sie es jetzt –

+0

Immer noch nicht 100%, aber sehr nahe! Ich habe Ihren Code auf der gleichen Ebene wie die Funktion change_url (statt innerhalb). Dann kommentierte ich natürlich den gesamten Code, der zu diesem Abschnitt in der Funktion change_url gehört. Ein Problem bleibt, der Parameter 'doc' ist vom Typ Event, nicht Document. Mehr getElementById Magie? – Tominator

Verwandte Themen