Javascript 根据单击的元素更改上下文菜单文本

Javascript 根据单击的元素更改上下文菜单文本,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我已经构建了一个Chrome扩展()。它在上下文菜单中添加了一个项目,因此用户可以右键单击页面上的一个元素,并回复他们博客上的相关“条目” 我的问题是,我是否能找到一个“条目”取决于它们单击的位置,并且涉及到遍历DOM树。我有一段代码,在触发contextmenu事件时突出显示条目,但现在更新上下文菜单中的文本已经太晚了。有没有办法在上下文菜单文本打开时动态更新它 (例如,如果没有找到条目,我想说“回复页面”,如果找到推文,我想说“回复推文”)不,在Chrome扩展/Firefox WebExt

我已经构建了一个Chrome扩展()。它在上下文菜单中添加了一个项目,因此用户可以右键单击页面上的一个元素,并回复他们博客上的相关“条目”

我的问题是,我是否能找到一个“条目”取决于它们单击的位置,并且涉及到遍历DOM树。我有一段代码,在触发
contextmenu
事件时突出显示条目,但现在更新上下文菜单中的文本已经太晚了。有没有办法在上下文菜单文本打开时动态更新它


(例如,如果没有找到条目,我想说“回复页面”,如果找到推文,我想说“回复推文”)

不,在Chrome扩展/Firefox WebExtension中,无法让JavaScript在上下文菜单打开时动态更改上下文菜单。在上下文菜单打开时,唯一动态变化的是:如果您添加了一个上下文菜单项,该项包含其
选择
上下文,那么您可以,它将被当前选择替换

在上下文菜单开始打开之前更改它 鼠标事件 要执行所需操作,需要在打开上下文菜单之前对上下文菜单进行更改。这可以通过使用侦听事件的服务器来实现。您可能最终不得不使用该事件或一个或多个///事件。如果您确实需要使用
mousedown
,一旦该事件触发,您应该开始收听一些
mouseenter
/
mouseleave
/
mouseover
/
mouseout
事件,以告知鼠标覆盖的元素何时更改,或者假设用户在按下按钮的同一元素上释放按钮

如果
mouseup
/
mousedown
事件是针对
button=2
,则需要使用更改上下文菜单。此过程有多个异步部分。这可能会导致各种竞争条件,并且可能需要使用比
mouseup
更早通知您的事件(例如
mousedown
mouseenter
/
mouseleave
/
mouseover
/
mouseout

您需要关注的事件可能与操作系统/平台/窗口系统有关。您需要进行测试,以确定您计划支持的每个环境中需要什么

键盘事件 也可以使用几个键盘序列打开关联菜单。您需要监听并执行与鼠标事件相同的消息传递。您需要确定您支持的所有操作系统/平台/窗口系统中的这些事件

Linux 在Linux上,它似乎是

OSX 在OSX上,似乎有一个

窗户 在Windows上,打开关联菜单的键盘快捷键包括:

上下文菜单键 您需要检测以下事件序列:

keydown{target:,key:“ContextMenu”,charCode:0,keyCode:93}
按键{目标:,键:“上下文菜单”,字符码:0,键码:93}
keyup{target:,key:“ContextMenu”,charCode:0,keyCode:93}
上下文菜单直到大约同时触发
keyup
事件时才会打开。我没有测试
keyup
是否发生得足够早,以便您在上下文菜单打开之前对其进行更改

键盘组合:Shift-F10 您需要检测以下事件序列:

keydown Shift{target:,key:“Shift”,charCode:0,keyCode:16,shiftKey:true}
keydown Shift{target:,key:“F10”,charCode:0,keyCode:121,shiftKey:true}
按键移位{目标:,键:“F10”,字符码:0,键码:121,移位键:true}

在这种情况下,上下文菜单打开的时间与移动的F10
keydown
/
keypress
事件触发的时间大致相同。没有
keyup
事件触发此键盘序列。

-根据您的需要调整内容脚本部分。是的,我知道如何更新上下文菜单,这更像是时间问题,因为上下文菜单事件太晚了。也许我需要在mousedown或click事件中尝试这样做。这些会在contextmenu事件之前解决吗?啊,是的,需要
mousedown
。我应该添加一个链接到。有一个更完整的答案,但我找不到