WRT构建Firefox附加组件。
是否可以通过某些XPCOM或javascript方法获取鼠标下的元素? (非js-ctypes请视需要操作系统特性)
当用户按下 Ctrl + Shift + M 时,我想检测鼠标下的内容。
现在我在用户按下此热键时向文档中添加mouseover
侦听器,因此我可以在移动它时将鼠标置于鼠标下方,但不能使用该元素下的元素。鼠标正好按下了热键组合。
答案 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
禁用了鼠标事件,则会失败。可能还有其他问题我没有想到......
当然,当文档没有悬停元素时(例如鼠标实际上不在文档中),这可以不返回任何内容。