Ich habe ein Problem mit meiner Firefox-Erweiterung
Ich habe ein XUL-Popup-Panel mit einer hbox für die Tag-Cloud und einen JS-Code, um divs zu dieser hbox hinzuzufügen:
%Vor%JS:
%Vor%Ich muss die Dimensionen jedes hinzugefügten div bekommen, aber getBoundingClientRect weigert sich einfach zu arbeiten. Wenn ich Warnungen lösche, ist es immer Null. Mit Warnungen ist die Geschichte anders: Wenn die Warnung das erste Mal aufgerufen wird, gibt sie null zurück, obwohl das Div auf dem Bildschirm angezeigt wird. Alle nachfolgenden Warnungen geben die richtigen Koordinaten zurück.
Wenn ich in Chromebug einen Haltepunkt festlege, wird alles korrekt gemeldet. Wenn ich die Ausführung in keiner Weise unterbrechen und eine Schleife ausführen, werden nur Nullen zurückgegeben.
Das hat mich ziemlich verwirrt. Der Aufruf von "boxObject" führt zu denselben Ergebnissen, während "getClientRects [0]" beim ersten Aufruf nicht definiert ist.
Irgendwelche Hinweise darauf, was das verursachen könnte, werden sehr geschätzt.
Obwohl ich keine Dokumentation zu diesem scheinbar grundlegenden Problem finden kann, ist das Problem, das Sie bemerkt haben, höchstwahrscheinlich darauf zurückzuführen, dass der Layout-Prozess ("Reflow") noch nicht ausgeführt wurde für die Koordinaten.
Der Layout / Reflow-Prozess nimmt das DOM der Seite mit allen Stilen der Seite und bestimmt die Positionen und Dimensionen der Elemente und anderer Teile der Seite (Sie könnten versuchen, Hinweis auf HTML-Reflow , obwohl es nicht für Webentwickler gedacht ist und wahrscheinlich etwas veraltet ist.
Dieser Reflow-Prozess wird nicht synchron nach einer Änderung des DOM ausgeführt, sonst wie
%Vor%würde das Layout zweimal aktualisieren, was ineffizient ist.
Auf der anderen Seite soll die Frage nach Elementen Position / Dimension (zumindest via .offsetTop
) das Layout zwingen, die korrekte Information zurückzugeben. Dies passiert in Ihrem Fall aus irgendeinem Grund nicht und ich bin mir nicht sicher warum.
Bitte erstellen Sie einen einfachen Testfall, der das Problem demonstriert und einen Bug in bugzilla.mozilla.org (CC me - [email protected]) eingibt.
Ich vermute, dass dies mit dem XUL-Layout zusammenhängt, das weniger robust ist als HTML; Sie könnten versuchen, die Cloud in einem HTML-Dokument in einem iframe oder zumindest in einer & lt; description & gt; Verwenden Sie createElementNS, um echte HTML-Elemente anstelle von xul: div zu erstellen, die Sie mit Ihrem aktuellen Code erstellen.
Tags und Links dom coordinates xul