【发布时间】:2012-03-18 21:10:49
【问题描述】:
我有一个 firefox 扩展,它需要获取 DOM 元素的确切屏幕坐标,并通过 js/c-types 将其传递给本机 DLL。
现在我基本上已经涵盖了它:
var gDomWindowUtils = window.QueryInterface(Components.interfaces.nsIInterfaceRequestor)
.getInterface(nsIDOMWindowUtils);
function getScreenRect(oElem)
{
var rc =
{
x : 0,
y : 0,
w : 0,
h : 0
};
var o = oElement;
while(o != null)
{
rc.y += o.offsetTop;
rc.x += o.offsetLeft;
o = o.offsetParent;
}
var x = {}, y = {};
gDomWindowUtils.getScrollXY(false, x, y);
rc.x -= x.value;
rc.y -= y.value;
var scale = gDomWindowUtils.screenPixelsPerCSSPixel;
rc.x *= scale;
rc.y *= scale;
rc.w *= scale;
rc.h *= scale;
return rc;
};
这处理滚动和缩放,但我得到的值是相对于浏览器窗口的,而不是屏幕。
如何检测浏览器实际渲染区域的客户区偏移量? 我什至可以通过 js/ctypes 使用本机代码(Win32)所以我试图看看我是否可以使用 FindWindow() / GetWindowRect() 来获取它,但是整个 firefox 是一个单一的 HWND,控件都不是本机窗口.
所以我的一个想法是,由于 firefox 的 UI 是 XUL 文档,我应该能够获取菜单栏、标签栏等,并找到浏览器区域的绝对偏移量。但是,我不知道如何访问定义浏览器 UI 的 XUL 树。
谁能给我指点一下?
[编辑] 忽略上面代码中未定义的rc.w和rc.h,与问题无关。
【问题讨论】:
标签: javascript firefox-addon xul jsctypes