代码之家  ›  专栏  ›  技术社区  ›  nico_lrx

Chrome扩展,获取selectionText周围的文字

  •  0
  • nico_lrx  · 技术社区  · 7 年前

    我创建了一个基本的Chrome扩展,在用户选择一些文本时添加了一个菜单。 我想得到包含所选文本的完整句子,但我找不到方法。

    chrome.contextMenus.create({
      title: "Selected text: %s",
      contexts:["selection"],
      onclick: doSmth,
    });
    
    function doSmth(info,tab) {
      console.log(info)
    }
    

    输出:

    {可编辑:false,frameId:0,menuItemId:9,pageUrl: “” http://www.liberation.fr/planete/2018/04/05/facebook-et-son-patron-en-operation-deminage_1641262 “, selectionText:“虹吸nées”}

    我想得到包含所选单词的完整句子,而不是“虹吸”。有可能吗?

    1 回复  |  直到 7 年前
        1
  •  1
  •   Denis L    7 年前

    我发现的最简单的方法是直接从后台脚本运行代码注入:

    出身背景js公司

    chrome.contextMenus.create({
        title: 'Selected text: %s',
        contexts: ['selection'],
        onclick: doSmth,
    });
    
    function doSmth(info, tab) {
        chrome.tabs.executeScript(tab.id, {
            file: 'inject.js'
        }, result => {
            console.log(result[0]); // sentence
        });     
    }
    

    注射js公司

    (function() {   
        const selection = window.getSelection();
        const chunk = selection.baseNode.textContent.slice(selection.baseOffset, selection.extentOffset);
        const re = new RegExp("(?:^|\\.\\s)((.(?!\\.\\s))*?)"+chunk+".*?\\.", 'g');
        return selection.baseNode.textContent.match(re);
    })();
    

    它使用 window.getSelection() 然后执行正则表达式以得到一个句子。