Was ist der richtige Weg, um einen Begrenzungsrahmen für HTML-Elemente relativ zum Fenster zu erhalten?

Ich schreibe eine Firefox-Erweiterung. Ich versuche es auf XUL + Javascript (kein XPCOM) zu beschränken. Wenn ich ein @ bekommouseoverei einem @ -Ereignis für ein HTML-Element muss der Begrenzungsrahmen im Windows-Koordinatensystem abgerufen werden (das ist das integrierte XUL-Dokument browser.xul).

Der naheliegende Startpunkt ist, so etwas in den Mouseover-Event-Handler einzufügen:

var rect = e.target.getBoundingClientRect();

Was ist toll, aber das gibt mir das Rect im Koordinatensystem des HTML-Dokuments, das relativ zur oberen linken Ecke des HTML-Zeichenbereichs ist. Ich möchte ein xul: panel-Element mit panel.openPopup () in der Nähe dieses Bildes anzeigen (ohne eines der vordefinierten @ -Elemente zu verwendenpopup positions), also muss ich die Koordinaten übersetzen.

Ich habe Folgendes versucht (im XUL-Bereich), um die Offset-Werte für die Übersetzung zu erhalten, und es funktioniert für einige Websites, aber nicht für alle. Die für Seitenleisten erforderliche X-Übersetzung scheint nicht berücksichtigt zu werden.

var appcontent = document.getElementById("appcontent");
if (appcontent) {
  chromeOffsetX = r.left;
  chromeOffsetY = r.top;
}

Also, wie geht man das am besten an?

Hinwei: für IE-Erweiterungen würde ich @ verwenden (und verwendet habeIDisplayServices :: TransformRect () - Gibt es für Firefox etwas Ähnliches?

Jetzt mit Kopfgeld!

Antworten auf die Frage(4)

Ihre Antwort auf die Frage