是否可以检测到右键单击浏览器上下文菜单上的左键单击?

Posted

技术标签:

【中文标题】是否可以检测到右键单击浏览器上下文菜单上的左键单击?【英文标题】:Is it possible to detect a left-click on a right-click browser context menu? 【发布时间】:2012-04-08 11:48:29 【问题描述】:

对话框、菜单或其他带有链接的 html 元素在响应点击时弹出,这是一种相当常见的模式。例如,如果您单击 Stack Overflow 编辑框上方的橙色问号,它会为“Links”、“Images”等添加一堆链接。然后,当您再次单击问号时,菜单就会消失。

我有类似的设置,只是我希望当用户单击菜单以外的任何位置时菜单消失。这并不难($(document.body).click(handleClickElsewhere))。但是,困难的是以下情况:

    用户单击以调出菜单 用户右键单击菜单中的一个链接(使浏览器上下文菜单出现) 用户左键单击浏览器上下文菜单的“在新选项卡中打开”菜单项 用户被带到新选项卡中的链接,但是 菜单在原始页面上保持打开状态

上面的困难部分是我想在这种情况下关闭菜单;当用户返回到他们原来的选项卡并且菜单仍然打开时,它看起来有点傻。不幸的是,似乎没有任何方法可以检测到用户单击了“在新选项卡中打开”,因此我无法关闭菜单作为响应。我可以关闭菜单以响应用户的右键单击(上面的第 2 步),但随后他们将无法选择“在新选项卡中打开”,因为链接将消失。

我尝试过 jQuery 的 click、mouseup、mousedown 和 contextmenu 事件,但似乎没有一个能捕捉到这种情况。

还有其他人想出解决办法吗?或者,如果不可能,比我更有知识的人可以明确解释原因吗?我的猜测是浏览器只是没有告诉你第 4 步中的点击,但我没有这个猜测的真实依据。

【问题讨论】:

【参考方案1】:

你可以检查the window lost focus,然后做出适当的反应(即关闭你的菜单)

但这假设浏览器默认设置为“切换到新标签”。有些用户可能会选择在后台打开新标签页的设置,这样主窗口不会失去焦点,这种方法不起作用。 (但是,嘿,如果我还在看它,谁想关闭菜单?)

【讨论】:

这是个好主意,但是这种方法有一个小问题:至少在我的浏览器中,当您选择“在新标签中打开”时,它不会立即切换到该标签。因此,尽管一旦用户单击新选项卡,菜单就会消失,但直到那时它仍然存在。如果这是最好的结果,那没关系,但如果有任何方法可以避免这种情况,那就太好了。 最接近的是检测上下文菜单事件***.com/a/4909687/575527,而不是被点击的项目。 这就是我害怕的;不过感谢您的重点建议:)

以上是关于是否可以检测到右键单击浏览器上下文菜单上的左键单击?的主要内容,如果未能解决你的问题,请参考以下文章

右键单击之前不应用上下文菜单样式

QML-在 MouseArea 中未检测到右键单击

通过左键单击 macOS 触发 SwiftUI 上下文菜单

WPF TreeView - TreeViewItem上的上下文菜单不会出现

如何禁用右键单击事件或如何隐藏 Autodesk Forge 查看器上的上下文菜单

QSystemTrayIcon 处理左右分别点击?