我正在写一个 Firefox 扩展。我试图将其限制为 XUL+Javascript(没有 XPCOM)。当我得到一个mouseover
HTML 元素的事件时,我需要在 windows 坐标系中获取它的边界框(即内置的 XUL 文档 browser.xul)。
显而易见的起点是在 mouseover 事件处理程序中放置类似这样的内容:
var rect = e.target.getBoundingClientRect();
这很好,但这给了我 HTML 文档坐标系中的 rect,它是相对于 HTML 绘图区域的左上角的。我想在此图像附近使用 panel.openPopup() 显示 xul:panel 元素(但不使用预定义的弹出位置之一),因此我需要转换坐标。
我已经尝试执行以下操作(在 XUL dom 中)以获取偏移量来进行翻译,它适用于某些网站,但不是全部,并且似乎没有考虑到侧边栏所需的 x 翻译。
var appcontent = document.getElementById("appcontent");
if (appcontent) {
chromeOffsetX = r.left;
chromeOffsetY = r.top;
}
那么,解决这个问题的最佳方法是什么?
注意:对于 IE 扩展,我会使用(并且已经使用)IDisplayServices::TransformRect() — Firefox 有类似的东西吗?
现在有赏金!