生成事件上下文菜单



我已经开发了js代码,它允许我通过另一个操作显示上下文菜单。例如,通过左键单击或按键。除了一些像gmail或Hotmail中的邮件之外,我成功地对大多数元素做了我想要的事情。当您右键单击时,会出现一个带有";档案";或";标记为未读";例如这不是出现的经典菜单。我想做的是强制在这些菜单上显示经典菜单。以下是我迄今为止生成上下文菜单事件的代码:

window.document.addEventListener("click", associate, false);
window.document.addEventListener("mousedown", associate, false);
window.document.addEventListener("mouseup", associate, false);
        
var associate = function(event)
{
    var element = event.srcElement||event.target;
    element.addEventListener("click", context, true);
    element.addEventListener("mousedown", context, true);
    element.addEventListener("mouseup", context, true);
};
var context = function(event)
{
    if(event.button == 0)
    {
        var element = event.srcElement||event.target;
        menu(element, event);
        event.stopPropagation();
        event.preventDefault();
    }
};
var menu = function(element, event)
{
    var evt = element.ownerDocument.createEvent('MouseEvents');
    evt.initMouseEvent('contextmenu', true, true, element.ownerDocument.defaultView, 1, event.screenX, event.screenY, event.clientX, event.clientY, false, false, false, false, 2, null);
    element.dispatchEvent(evt);
}; 

这样,例如,在gmail中的一封电子邮件上,当我左键单击时,我仍然有一个特殊的gmail上下文菜单。你知道我该怎么做吗?

您可以识别具有自定义上下文菜单的特定元素或元素类,并在事件侦听器中定位它们。禁用或删除附加到这些元素的自定义上下文菜单的事件侦听器。

window.document.addEventListener("click", associate, false);
window.document.addEventListener("mousedown", associate, false);
window.document.addEventListener("mouseup", associate, false);
var associate = function (event) {
    var element = event.srcElement || event.target;
    element.addEventListener("click", context, true);
    element.addEventListener("mousedown", context, true);
    element.addEventListener("mouseup", context, true);
    // Disable Gmail or Hotmail custom context menus
    if (element.classList.contains("gmail-class") || element.classList.contains("hotmail-class")) {
        element.removeEventListener("contextmenu", null, true);
    }
};
var context = function (event) {
    if (event.button == 0) {
        var element = event.srcElement || event.target;
        menu(element, event);
        event.stopPropagation();
        event.preventDefault();
    }
};
var menu = function (element, event) {
    var evt = element.ownerDocument.createEvent("MouseEvents");
    evt.initMouseEvent("contextmenu", true, true, element.ownerDocument.defaultView, 1, event.screenX, event.screenY, event.clientX, event.clientY, false, false, false, false, 2, null);
    element.dispatchEvent(evt);

您还需要替换"gmail类"";hotmail类"带有Gmail和Hotmail用于自定义上下文菜单的实际类名或属性。

请记住,像Gmail和Hotmail这样的网络邮件服务可能会混淆类名或频繁更新前端代码。这可能会使识别正确的元素或保持与自定义上下文菜单的兼容性变得困难。

最新更新