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

我做了一个非常简单的 chrome extension,它允许用户突出显示DOI编号,右键单击并选择“Resolve DOI”,然后将它们发送到相关的网页.现在,这是在background.html中完成的:
chrome.contextMenus.create({
"title" : "Resolve DOI","type" : "normal","contexts" : ["selection"],"onclick" : getClickHandler()
});

我想限制上下文菜单选项仅在他们突出显示的文本以“10”开头时才会出现.有关如何做到这一点的任何建议?我是否需要等待Context Menus模块变得更高级?

解决方法

您需要从内容脚本控制内容菜单创建.动态菜单创建/删除应该非常快速地执行,并且延迟对于用户来说是不明显的.

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

沿着这些方向的东西(未经测试):

content_script.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);

background.html:

chrome.extension.onRequest.addListener(function(request) {
    if(request.cmd == "create_menu") {
        chrome.contextMenus.removeAll(function() {
            chrome.contextMenus.create({
                "title" : "Resolve DOI","onclick" : getClickHandler()
            });
        });
    } else if(request.cmd == "delete_menu") {
        chrome.contextMenus.removeAll();
    }
});

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...