如何触发元素上的浏览器上下文菜单。 (好像用户右键点击)(How do I trigger th

2019-06-28 09:18发布

我有需要触发通过JavaScript浏览器(IE,火狐,Safari浏览器等),上下文菜单的打开。 我想解决的问题,是当一个重叠元素是右键单击,在它下面的元素显示其上下文菜单。 因此,如果顶层元素是一个标签,当你右键点击,我需要显示为下面的输入的元素的上下文菜单。

我知道如何保持标签的右键菜单来显示,但我不知道如何随意打开一个上下文菜单。

任何帮助表示赞赏!

Answer 1:

对不起,是不幸的消息的人,但是这是不可能的JavaScript做。



Answer 2:

我不想阻挠你,恰恰相反,尤其是因为你回答我的问题:)

我不认为浏览器的contect菜单是通过网页上的一个普通的脚本访问。

如果你问的是实际可行的,那么浏览器制造商可能会认为这是一个错误,删除此行为。 跨浏览器,这种行为是不太可能今天是可用的。

你为什么不捕获鼠标事件,每当鼠标直接在下面要显示,推低覆盖的元素的上下文菜单元素的区域,否则重回巅峰?

这是一个方法可行,我能想到的,基本上露出/暴露取决于鼠标的位置隐藏的元素。 像切割孔到覆盖。

或者,你为什么不使文本字段透明,把下面的文本字段覆盖完全?

如果这个不奏效技术,那么至少你在提交bug或增强针对目标浏览器中的一个点。

顺便说一句,它看起来像上下文菜单居然直接插入符号的位置,如果用户右键单击的作品,所以这可能是另一个漏洞为你考虑。



Answer 3:

我有可能会满足您的需求可能的解决方案。 这是不是很完美,我只是做在一些浏览器的几个简单的测试(福克斯3.6,IE7,IE8,Chrome 4的,在XP上的Safari 3)需要进行调整和改进,但它的一个开端。 基本思路是,以去除标签上的鼠标按下使所需字段由鼠标松开事件击,因此触发了对相关领域的上下文菜单中单击鼠标右键。

// Remove the contextmenu from "In-Field" Labels
base.$label.bind("contextmenu",function(e){
    return false;
}); 

// Detect right click on "In-Field" label:
// hide label on mousedown so mouseup will target the field underneath.
base.$label.mousedown(function(e){          
    if ( e.which == 3 ){
        var elLbl = $(this); 
        elLbl.hide();
        var elFid = $(this).attr("for");
        // bind blur event to replace the label when we are done.
        $("#" + elFid ).bind("blur.infieldlabel",function(){                    
            elLbl.show();
            $("#" + elFid ).unbind("blur.infieldlabel");                    
        });             
        return false;
    }
}); 

在IE和Safari浏览器遇到一个奇怪的问题,你需要点击和两次前的标签将再次显示(是与事件相关的定时,我认为)。 您可以很容易地看到为什么这是通过看代码发生。 另外,在狐狸有时会发现轻微的毛刺粘贴到后场,在模糊的标签出现的一瞬间,当它不应该。 这应该是一个相当简单的事情,如果你决定将这一方法到你的代码来纠正。



文章来源: How do I trigger the browser context menu on an element. (As if the user right-clicked)