在我的扩展程序中,在某些情况下,我需要显示上下文菜单,就像它已被单击一个不同的元素一样。例如:我右键单击页面上的某个元素,但是上下文菜单应该显示为好像在光标下面没有上面的元素,而是我指定的其他元素。
我尝试在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,正确显示上下文菜单,如果我点击其他任何地方,根本没有显示上下文菜单)。谁能明白为什么这不起作用?
答案 0 :(得分:0)
为什么不将document.popupNode
设置为您的元素,调用gContextMenu.init(contextMenu, gBrowser);
然后再次清除document.popupNode
?
答案 1 :(得分:0)
这只是一个疯狂的猜测,但是因为你在第一个事件的上下文菜单已经打开时这样做,这可能是阻止上下文菜单再次打开。尝试10ms后发送事件,以便原始上下文菜单已关闭。