Я пишу расширение Firefox. Я пытаюсь ограничить его просто XUL+Javascript (никакой XPCOM). Когда я получаю a mouseover
событие для элемента HTML, я должен получить его ограничительную рамку в системе координат окон (который является встроенным документом XUL browser.xul).
Очевидное место для запуска состоит в том, чтобы поместить что-то вроде этого в обработчик событий mouseOver:
var rect = e.target.getBoundingClientRect();
Который является большим, но это дает мне реагирование в системе координат документа HTML, которая является относительно левого верхнего угла области рисования HTML. Я хочу отобразить xul:panel элемент с помощью panel.openPopup () около этого изображения (но не используя одно из предопределенных раскрывающихся положений), таким образом, я должен перевести координаты.
Я попытался делать следующее (в XUL dom), чтобы заставить смещение делать перевод, и это работает на некоторые сайты, но не все, и, кажется, не принимает во внимание x перевод, необходимый для боковых панелей.
var appcontent = document.getElementById("appcontent");
if (appcontent) {
chromeOffsetX = r.left;
chromeOffsetY = r.top;
}
Так, что лучший способ состоит в том, чтобы приблизиться к этому?
Примечание: для расширений IE я использовал бы (и использовали), IDisplayServices:: TransformRect () — является там чем-то подобным для Firefox?
Теперь с щедростью!
Оказалось, что получение местоположения не имеет значения, поскольку вы можете позиционировать элементы относительно элемента, используя что-то вроде:
hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false);
Этот вопрос содержит код, который определяет x и y элемента относительно видимого окна. Не уверен, что это ответ на ваш вопрос.