如果我这样做
<a href ... oncontextmenu="myFunction(event)">
当用户右键单击某个链接时会调用它,会出现上下文菜单。但我希望在选择了上下文菜单项后获得事件。理想情况下,只有当他们选择“打开链接...”时,才能访问他们实际点击的内容。
更喜欢非JQuery答案,但如果需要,JQuery就是o.k。
补充:解释我正在尝试做什么:
当用户直接点击指向另一个(商业酒店搜索程序)网站的链接时,我会提出一点警告“如果您预订房间,请输入XXXX作为礼品代码”)。如果他们右键单击并在新选项卡中打开链接等,也想提出此警报。,。,
添加#2:感谢您提供及时直接的答案。请参阅下面的“答案”,了解我最终做了什么。如果还有其他选择,我会打开这个问题。
答案 0 :(得分:2)
在Javascript中无法做到这一点,但您可以通过使用自定义菜单替换默认上下文菜单来实现您的目标。
答案 1 :(得分:1)
你做不到。 contextmenu
事件的主要目的是允许页面替换浏览器的上下文菜单,其中自己的菜单呈现为HTML。浏览器上下文菜单的内容未由任何HTML标准指定,并且因浏览器而异。上下文菜单中的大多数选项都是指页面范围之外的操作(例如,“复制”,“查看页面源”,“在新窗口中打开链接”,“另存为”,等。),并且在选择它们时页面上没有触发事件,除非正在执行的操作通常会触发事件。 (例如,选择“打印”可能会触发onbeforeprint
和onafterprint
事件。)
WHATWG HTML5规范指定a menu
element,可用于将项目添加到浏览器的上下文菜单,但it's currently only supported under Firefox。所以这可能不是一个真正的选择。
答案 2 :(得分:0)
只是一个想法,而且我不确定你想要做什么,但我会尝试按设定的延迟调用该函数,如下所示:
<a href="javascript:void(0)" oncontextmenu="setTimeout(function(){alert('You called the context menu.')}, 3000);">Right-Click Me, then wait for 3 seconds.</a>
&#13;
唯一的缺点是,一旦调用alert()
,就会隐藏上下文菜单。
希望这有帮助!
答案 3 :(得分:0)
我最终做的是在我的网站上插入一个中间页面。
路径(我使用node&amp; Express)不是直接转到外部站点,而是显示一个带有解释性文本的中间页面,一个复选框“得到它,不再显示此页面”,(在我的情况下,答案存储在localStorage中,其他人可能存储在服务器上)和一个绿色的大按钮,可以将您带到外部站点。
如果路由包含查询“?directXXX = true”(从localStorage读取),则跳过中间页面并立即重定向到外部页面。
通过这种方式,我得到了一个更好的解释性页面,带有图像等...(对话框,即使你使用类似alertify的东西,看起来像klunky),然后我会“拦截”所有呼叫外部网站。