获取当前在鼠标下的元素而不使用鼠标事件

时间:2014-07-02 18:28:13

标签: javascript firefox-addon mouseevent xpcom

WRT构建Firefox附加组件。

是否可以通过某些XPCOM或javascript方法获取鼠标下的元素? (非js-ctypes请视需要操作系统特性)

当用户按下 Ctrl + Shift + M 时,我想检测鼠标下的内容。

现在我在用户按下此热键时向文档中添加mouseover侦听器,因此我可以在移动它时将鼠标置于鼠标下方,但不能使用该元素下的元素。鼠标正好按下了热键组合。

1 个答案:

答案 0 :(得分:10)

我只是通过源代码查看了获取(或存储并提供)光标位置的代码。我没有找到任何可以使用的东西(从Javascript,XPCOM或不是)。我可能错过了一些东西...... MXR是你的朋友。

但是,如果你想避免mousemove(这通常是一个好主意),你可以只寻找最里面的悬停元素,例如像这样。

function getInnermostHovered() {
    var n = document.querySelector(":hover");
    var nn;
    while (n) {
        nn = n;
        n = nn.querySelector(":hover");
    }
    return nn;
}

fiddle演示原则)

虽然这是我认为的黑客攻击,但它似乎在大多数情况下都能正常运行,但如果该元素通过pointer-events禁用了鼠标事件,则会失败。可能还有其他问题我没有想到......

当然,当文档没有悬停元素时(例如鼠标实际上不在文档中),这可以不返回任何内容。