7

我正在写一个 Firefox 扩展。我试图将其限制为 XUL+Javascript(没有 XPCOM)。当我得到一个mouseoverHTML 元素的事件时,我需要在 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 有类似的东西吗?

现在有赏金!

4

2 回答 2

0

这个问题的代码可以计算出元素相对于可见窗口的 x 和 y。不确定它是否回答了你的问题。

于 2010-07-22T20:31:14.947 回答
0

事实证明,获取位置是无关紧要的,因为您可以使用以下方式相对于元素定位项目:

hoverPanel.openPopup(someElement, "overlap", offsetX, offsetY, false, false);
于 2010-07-23T17:08:39.460 回答