我想在最终选择之后获取 HTML onContextMenu 的事件,而不是在初始单击时

I want to get an event for an HTML onContextMenu *after* the final selection, not at initial click

本文关键字:单击 事件 onContextMenu 选择 之后 HTML 获取      更新时间:2023-09-26

如果我这样做

<a href ... oncontextmenu="myFunction(event)">

当用户右键单击链接时,在上下文菜单出现之前,将调用它。 但是我想在选择上下文菜单项获取事件。 理想情况下,只有当他们选择了"在...中打开链接"时,才能访问他们实际单击的内容。

更喜欢非 JQuery 的答案,但如果需要,JQuery 是可以的。

补充:解释我想做什么:

当用户直接点击另一个(商业酒店查找器)网站的链接时,我会显示一个小警报"如果您预订房间,请输入XXXX作为礼品代码")。 如果他们右键单击并在新选项卡中打开链接等,也想发出此警报,.,

添加#2:感谢您的及时和直接的回答。 请参阅下面的"答案",了解我最终做了什么。 如果还有其他选择,我将保留这个问题。

这在

Javascript 中是不可能的,但您可以通过将默认上下文菜单替换为自定义上下文菜单来实现您正在寻找的内容。

你不能。contextmenu 事件的主要目的是允许页面将浏览器的上下文菜单替换为其自身呈现为 HTML 的菜单。浏览器上下文菜单的内容未由任何 HTML 标准指定,并且会因浏览器而异。上下文菜单中的大多数选项都引用页面范围之外的操作(例如,"复制"、"查看页面源代码"、"在新窗口中打开链接"、"另存为"等),并且选择它们时不会在页面上触发事件,除非正在执行的操作通常会触发事件。(例如,选择"打印"可能会触发onbeforeprintonafterprint事件。

WHATWG HTML5规范指定了一个menu元素,可用于将项目添加到浏览器的上下文菜单中,但目前仅在Firefox下受支持。所以这可能也不是一个真正的选择。

只是一个想法,我不确定你想做什么,但我会尝试在设定的延迟下调用该函数,如下所示:

<a href="javascript:void(0)" oncontextmenu="setTimeout(function(){alert('You called the context menu.')}, 3000);">Right-Click Me, then wait for 3 seconds.</a>

唯一的缺点是,一旦调用了alert(),上下文菜单就会被隐藏。

希望这有帮助!

我最终要做的是在我的网站上插入一个中间页面。

路线(我正在使用node&Express)不是直接转到外部站点,而是打开一个带有解释性文本的中间页面,一个复选框"知道了,不要再显示此页面"(在我的情况下,答案存储在localStorage中,其他人可能存储在服务器上)和一个大的绿色OK按钮,将您带到外部站点。

如果路由包含查询"?directXXX=true"(从 localStorage 读取),则跳过中间页并立即重定向到外部页。

这样我得到了一个更好的解释性页面,带有图像等......(对话框,即使您使用类似 alertify 的东西,看起来也很笨拙)我可以"拦截"对外部站点的所有调用。