Пишу расширение для Firefox. Я пытаюсь ограничить его только XUL + Javascript (без XPCOM). Когда я получаю событие mouseover для элемента HTML, мне нужно получить его ограничивающую рамку в системе координат Windows (это встроенный 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?

Теперь с щедростью!

7
i_am_jorf 17 Июл 2010 в 23:54

2 ответа

Лучший ответ

Оказывается, определение местоположения не имеет значения, потому что вы можете позиционировать элементы относительно элемента, используя что-то вроде:

hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false);
0
i_am_jorf 23 Июл 2010 в 17:08

Этот вопрос имеет код, который определяет x и y элемента относительно видимого окна. Не уверен, что это ответ на ваш вопрос.

0
Community 23 Май 2017 в 12:01