Изменить флаги gContextMenu в расширении Firefox - PullRequest
0 голосов
/ 28 февраля 2011

В моем расширении при определенных обстоятельствах мне нужно отобразить контекстное меню, как если бы оно было щелкнуто по другому элементу. Например: я щелкаю правой кнопкой мыши по определенному элементу на странице, но контекстное меню должно отображаться так, как если бы под курсором не было элемента выше, а скорее другой элемент, который я указываю.

Я попытался сделать это в обработчике всплывающих окон следующим образом:

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 определен здесь . К сожалению, это не работает (если я действительно нажимаю на newElement, контекстное меню отображается правильно, если я щелкаю в другом месте, контекстное меню вообще не отображается). Кто-нибудь может понять, почему это не работает?

Ответы [ 2 ]

0 голосов
/ 05 марта 2011

Это всего лишь дикая догадка, но поскольку вы делаете это, когда контекстное меню из первого события уже открывается, возможно, это блокирует повторное открытие контекстного меню.Попробуйте отправить событие через 10 мсек, чтобы исходное контекстное меню уже закрылось.

0 голосов
/ 28 февраля 2011

Почему бы не установить document.popupNode для вашего элемента, вызвать gContextMenu.init(contextMenu, gBrowser);, а затем снова очистить document.popupNode?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...