0

我正在编写一个相当简单的 Firefox 插件,当用户在网页上的任何位置用鼠标右键单击时,我想做一些事情。我让它工作了,但奇怪的是,我也从 Firefox UI 中获得了所有的右键单击(比如在工具栏、选项卡、urlbar 等上)。我当然对这些不感兴趣。

document.addEventListener("contextmenu", function(e) {
    // do stuff here
}, true);

我最初在窗口上有这个监听器,但它并没有改变任何事情。

关于如何仅在网站中发生右键单击时触发事件的任何提示?

4

1 回答 1

2

我猜您正在从浏览器窗口覆盖层运行您的代码 - 所以document您将事件侦听器附加到浏览器窗口的 XUL 文档。如果您只需要来自浏览器的事件,那么您应该将事件侦听器附加到浏览器。这仍然不能完全满足您的需求,因为浏览器也有一些用户界面(通知栏),但很容易检测事件目标是否在内容文档中:

gBrowser.addEventListener("contextmenu", function(e) {
    if (e.target.ownerDocument.defaultView.top == window)
      return;

    // do stuff here
}, true);

这使用了浏览器内窗口的顶部内容窗口这一事实window.top——它们不能越过 XUL 代码的边界。对于浏览器 UI 元素,您将获得真正的顶部窗口,但这是您运行的窗口。

于 2012-06-28T18:32:57.000 回答