在右键菜单中添加自定义事件

一、覆盖默认右键菜单的方式

        出于安全和用户体验的考虑,不允许直接修改或向默认的右键菜单(浏览器的上下文菜单)添加自定义项。因为允许网页脚本更改或扩展默认的上下文菜单可能会造成用户困惑,并有可能被恶意网站利用来进行钓鱼或其他不良行为。所以一般的右键菜单都是自定义的,会在监听事件中添加阻止默认事件event.preventDefault()。






Custom Context Menu



Right click me!
  • Custom Action 1
  • Custom Action 2
  • Custom Action 3

二、使用插件的方式在默认右键菜单添加自定义事件

        如果真的需要在默认右键菜单中添加自定义事件,可以通过浏览器扩展程序来实现,这些扩展程序可以使用特殊的API来向浏览器的上下文菜单中添加自定义项。这样做需要用户明确安装这个扩展程序,并授予它修改上下文菜单的权限。扩展程序有更多的权限来与浏览器的一些内置功能交互,包括修改上下文菜单。官网参考例子:https://github.com/GoogleChrome/chrome-extensions-samples/blob/main/api-samples/contextMenus/basic/sample.js

1. 首先需要在 manifest中添加对应的 contextMenus 权限

{
  "name": "自定义右键菜单项",
  "description": "Uses the chrome.contextMenus API to customize the context menu.",
  "version": "0.7",
  "permissions": ["contextMenus"],
  "background": {
    "service_worker": "background.js"
  },
  "content_scripts": [
    {
      "matches": [
        ""
      ],
      "js": ["content_script.js"]
    }
  ],
  "manifest_version": 3
}

2. 然后background.js中添加监听

// 监听菜单项点击事件
chrome.contextMenus.onClicked.addListener((info, tab) => {
  // 可以通过 sendMessage 将信息发送到content_script.js处理 或 在此处处理
  chrome.tabs.sendMessage(tab.id, { message: 'Custom ContextMenus Action', menuItemId: info.menuItemId, selectedText: info.selectionText});
});

chrome.runtime.onInstalled.addListener(function() {
  chrome.contextMenus.create({
      "id": "zh_translate",
      "title": "翻译成中文",
      "contexts": ["selection"]  // all 右键菜单都会显示,page 仅页面菜单会显示,selection 仅选中文本右键菜单显示,link 链接右键菜单显示,image 图片右键菜单显示,audio 音频,video视频,editable编辑
  });
  chrome.contextMenus.create({
    "id": "en_translate",
    "title": "翻译成英文",
    "contexts": ["selection"]
  });
});

3. 在content_script.js接收数据

chrome.runtime.onMessage.addListener((request, sender, sendResponse) =>{
  if (request.message === "Custom ContextMenus Action") {
    console.log(request)
  }
});

你可能感兴趣的:(谷歌插件,javascript,html,右键,菜单,插件,自定义)