我已经构建了Chrome扩展程序(https://chrome.google.com/webstore/detail/omnibear/cjieakdeocmiimmphkfhdfbihhncoocn)。它在上下文菜单中添加了一个项目,因此用户可以右键单击页面上的元素并回复其博客上的相关“条目”。
我的问题是,我是否能找到“条目”取决于他们点击的位置,并涉及遍历DOM树。我有代码,在contextmenu
事件被触发时突出显示条目,但是在上下文菜单中更新文本为时已晚。有没有办法在打开时动态更新上下文菜单文本?
(例如,如果没有找到条目,我想说“回复页面”,或者如果发现推文,则“回复推文”)
答案 0 :(得分:0)
不,在Chrome扩展程序/ Firefox WebExtension中,无法让您的JavaScript在上下文菜单打开时对上下文菜单进行动态更改。在上下文菜单打开时唯一动态更改 的是:如果您添加了一个上下文菜单项,其selection
的{{1}}上下文,那么您可以ContextType,将替换为当前选择。
要执行您想要的操作,您需要在打开上下文菜单开始之前对上下文菜单进行更改。这可以通过使用specify %s
in the title
来监听content script事件来实现。您可能必须最终使用mouseup
事件,或mousedown
/ mouseenter
/ mouseleave
/ mouseover
个事件中的一个或多个。如果您确实需要使用mousedown
,那么一旦该事件触发,您应该开始收听一些mouseenter
/ mouseleave
/ mouseover
/ mouseout
个事件。告诉鼠标结束的元素何时发生变化,或者只是假设用户释放按下它的同一元素上的按钮。
如果mouseup
/ mousedown
事件适用于button=2
,则您需要mouseout
更改上下文菜单message your background script。此过程有多个异步部分。这可能会导致各种竞争条件,并且可能需要使用比mouseup
提供早期通知的事件(例如mousedown
,mouseenter
/ mouseleave
/ mouseover
/ mouseout
)。
您需要注意哪些事件可能取决于操作系统/平台/窗口系统。您需要进行测试以确定您计划支持的每个环境中需要什么。
也可以使用一些键盘序列打开上下文菜单。您将需要监听并执行鼠标事件所需的相同消息传递。您需要确定这些事件在您支持的所有操作系统/平台/窗口系统中的作用。
在Linux上,它显示为contextMenus.update()
。
在OSX上,似乎是vary at least based on platform。
在Windows上,打开上下文菜单的键盘快捷键为:
上下文菜单键您需要检测以下事件序列:
keydown { target: <body>, key: "ContextMenu", charCode: 0, keyCode: 93 }
keypress { target: <body>, key: "ContextMenu", charCode: 0, keyCode: 93 }
keyup { target: <body>, key: "ContextMenu", charCode: 0, keyCode: 93 }
在keyup
事件触发的同时,上下文菜单才会打开。我没有测试keyup
是否发生得足够早,以便在打开之前对上下文菜单进行更改。
您需要检测以下事件序列:
keydown Shift { target: <body>, key: "Shift", charCode: 0, keyCode: 16, shiftKey: true }
keydown Shift { target: <body>, key: "F10", charCode: 0, keyCode: 121, shiftKey: true }
keypress Shift { target: <body>, key: "F10", charCode: 0, keyCode: 121, shiftKey: true }
在这种情况下,上下文菜单会在移动的 F10 keydown
/ keypress
事件触发的同时打开。此键盘序列不会触发keyup
个事件。