如何限制上下文菜单仅针对 Chrome 扩展程序中的某些选定文本显示?

2024-04-27

我做了一个非常简单的镀铬扩展 https://chrome.google.com/extensions/detail/goanbaknlbojfglcepjnankoobfakbpg它允许用户突出显示 DOI 号码,右键单击并选择“解析 DOI”,然后将其发送到关联的网页。现在,这是在 background.html 中完成的:

chrome.contextMenus.create({
"title" : "Resolve DOI",
"type" : "normal",
"contexts" : ["selection"],
"onclick" : getClickHandler()
});

我想限制上下文菜单选项仅在突出显示的文本以“10”开头时才出现。关于如何执行此操作有什么建议吗?我是否需要等待上下文菜单模块变得更高级?


您需要从内容脚本控制内容菜单的创建。动态菜单创建/删除应该执行得相当快,并且用户不会注意到延迟。

  • 在内容脚本中添加 mousedown 事件侦听器,并检查选择是否满足您的模式。
  • 根据选择是否与模式匹配,向后台页面发送请求,要求创建或删除菜单。

沿着这些思路(未测试):

内容脚本.js:

document.addEventListener("mousedown", function(event){
    var selection = window.getSelection().toString();
    if(selection.match(/^10\./)) {
        chrome.extension.sendRequest({cmd: "create_menu"});
    } else {
        chrome.extension.sendRequest({cmd: "delete_menu"});
    }
}, true); 

背景.html:

chrome.extension.onRequest.addListener(function(request) {
    if(request.cmd == "create_menu") {
        chrome.contextMenus.removeAll(function() {
            chrome.contextMenus.create({
                "title" : "Resolve DOI",
                "type" : "normal",
                "contexts" : ["selection"],
                "onclick" : getClickHandler()
            });
        });
    } else if(request.cmd == "delete_menu") {
        chrome.contextMenus.removeAll();
    }
});
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何限制上下文菜单仅针对 Chrome 扩展程序中的某些选定文本显示? 的相关文章