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