在Firefox扩展中更改gContextMenu标志

时间:2011-02-27 21:13:20

标签: javascript firefox firefox-addon

在我的扩展程序中,在某些情况下,我需要显示上下文菜单,就像它已被单击一个不同的元素一样。例如:我右键单击页面上的某个元素,但是上下文菜单应该显示为好像在光标下面没有上面的元素,而是我指定的其他元素。

我尝试在popupshowing处理程序中执行此操作:

window.addEventListener( "load", function() {
    var contextMenu = document.getElementById("contentAreaContextMenu");
    if (contextMenu) {
        contextMenu.addEventListener("popupshowing", function(event) {
            if (document.popupNode !== newElement) {
                event.preventDefault();
                synthesizeMouse(newElement, 2, 2, { type: "contextmenu", button: 2 }, newElement.ownerDocument.defaultView);
            }
        }, false);
    }
}, false );

newElement是应该“点击”的元素,并且synthesizeMouse被定义为here。不幸的是,它不起作用(如果我实际点击newElement,正确显示上下文菜单,如果我点击其他任何地方,根本没有显示上下文菜单)。谁能明白为什么这不起作用?

2 个答案:

答案 0 :(得分:0)

为什么不将document.popupNode设置为您的元素,调用gContextMenu.init(contextMenu, gBrowser);然后再次清除document.popupNode

答案 1 :(得分:0)

这只是一个疯狂的猜测,但是因为你在第一个事件的上下文菜单已经打开时这样做,这可能是阻止上下文菜单再次打开。尝试10ms后发送事件,以便原始上下文菜单已关闭。