编写 Chrome 插件,自定义右键菜单功能,如实现划词跳转翻译网站

Chrome 插件可以给浏览器增加自定义的功能,如在右键菜单中增加菜单项。这时候我们就可以根据需要添加一些功能,如划词右键跳转翻译网站。

新增配置文件 manifest.json

创建目录,新增 manifest.json 文件,它是 Chrome 插件的核心配置文件,定义权限、资源及扩展行为的基础设置。

Chrome 加载解压缩的扩展时,读取到该文件时就会判断该目录为插件。

permissions 定义所需权限:

  • contextMenus:操作右键菜单
  • activeTab:临时访问当前激活的标签页
  • scripting:动态注入/移除脚本
{
  "manifest_version": 3,
  "name": "自定义右键菜单",
  "version": "1.0",
  "permissions": ["contextMenus", "activeTab", "scripting"],
  "background": {
    "service_worker": "background.js"
  },
  "action": {}
}

background.js 定义右键菜单

service_worker 指定插件的后台服务脚本,监听扩展安装事件、定义右键菜单、处理右键菜单点击等都是在该文件中执行。

创建右键菜单项:

chrome.runtime.onInstalled.addListener(() => {
    chrome.contextMenus.create({
        id: "jumpToTranslateSite",
        title: "翻译: %s", // %s 自动替换为选中文本
        contexts: ["selection"]  // 仅在选中文本时显示
    });
});

监听菜单点击事件:

chrome.contextMenus.onClicked.addListener((info, tab) => {
    if (info.menuItemId === "jumpToTranslateSite" && info.selectionText) {
        const selectedText = info.selectionText.trim();

        chrome.scripting.executeScript({
            target: { tabId: tab.id },
            func: (text) => {
                console.log( `你选中的文本是:${text}`)
            },
            args: [selectedText]
        });
    }
});

定义菜单逻辑

此时就可以按照自己的需求,定制右键菜单功能了。如直接打开新窗口,跳转到翻译网站:

window.open(`翻译网站域名/dictionary/${text}`);

比起使用第三方的划词翻译软件,这样的功能可自由控制,简洁又灵活。

也可以创建多个子菜单,分别跳转到不同的词典中,或者一个菜单里直接跳到多个词典中,进行对比。

我们也可以根据其他需要,定制各种各样的菜单功能。