Javascript 有没有办法为上下文菜单项(google chrome扩展)定义自己的上下文
我有一个简单的chrome扩展,我的目标是悬停在任何img或视频或音频标签上,通过右键单击img、视频或音频,获得带有扩展项的上下文菜单 所以问题是,当一些img位于div内部或后面时,我无法获取上下文菜单项,因为它与上下文不匹配。视频和音频有时也会发生同样的事情。我的问题是,有没有什么方法可以编写自己的上下文,而不是使用谷歌的“图像”、“视频”、“音频” 我已经有了一些正在工作的扩展,所以我需要用一些图片来解决这个问题Javascript 有没有办法为上下文菜单项(google chrome扩展)定义自己的上下文,javascript,google-chrome-extension,Javascript,Google Chrome Extension,我有一个简单的chrome扩展,我的目标是悬停在任何img或视频或音频标签上,通过右键单击img、视频或音频,获得带有扩展项的上下文菜单 所以问题是,当一些img位于div内部或后面时,我无法获取上下文菜单项,因为它与上下文不匹配。视频和音频有时也会发生同样的事情。我的问题是,有没有什么方法可以编写自己的上下文,而不是使用谷歌的“图像”、“视频”、“音频” 我已经有了一些正在工作的扩展,所以我需要用一些图片来解决这个问题 var contextMenuItem = { "id": "pr
var contextMenuItem = {
"id": "printData",
"title": "print",
"contexts": ["image", "audio", "video"]
};
chrome.contextMenus.removeAll(function() {
chrome.contextMenus.create(contextMenuItem)
});
chrome.contextMenus.onClicked.addListener(function(mediaData){
if (mediaData.menuItemId == "printData") {
console.log(mediaData)
}
});
因此,我想要的是当我在页面上显示任何图像时,上下文菜单项的显示。因为现在它可能有50%的时间是有效的。谢谢不,无法添加自定义上下文 您可以使用单独的
id
在“页面”
上下文中注册一个附加菜单项,并在内容脚本中使用鼠标向下
事件侦听器动态显示/隐藏它。监听器将在contextmenu
事件之前触发,如果事件的目标包含img/media,监听器将通知后台脚本。后台脚本将使用chrome.contextMenus API切换菜单项
:
:
不过,这个简化的示例将全局切换所有选项卡的菜单项。Chrome API无法切换每个选项卡的菜单,因此您可能希望实现的最接近的方法是使用documentUrlPatterns来指定选项卡URL,但这是一种边缘情况,可能不值得追求。可能重复
// true means 'useCapture' mode (the first event phase)
window.addEventListener('mousedown', e => button === 2 && beforeContextMenu(e), true);
window.addEventListener('keydown', e => {
if (e.key === 'ContextMenu' ||
e.key === 'F10' && e.shiftKey && !e.altKey && !e.ctrlKey && !e.metaKey) {
beforeContextMenu(e);
}
}, true);
function beforeContextMenu(e) {
const el = !e.target.matches('img, video, audio') &&
e.target.querySelector('img, video, audio');
chrome.runtime.sendMessage({
contextMenu: el ? el.currentSrc || el.src : '',
});
}
chrome.runtime.onMessage.addListener((message, sender) => {
if (message.contextMenu) {
chrome.contextMenus.create({
id: 'printData:page',
title: 'print',
contexts: ['page'],
}, ignoreChromeError);
} else if (message.contextMenu === '') {
chrome.contextMenus.remove('printData:page', ignoreChromeError);
}
});
chrome.runtime.onInstalled.addListener(() => {
chrome.contextMenus.create({
id: 'printData',
title: 'print',
contexts: ['image', 'audio', 'video'],
}, ignoreChromeError);
});
chrome.contextMenus.onClicked.addListener(e => {
if (e.menuItemId.startsWith('printData')) {
console.log(e);
}
});
function ignoreChromeError() {
return chrome.runtime.lastError;
}