Chrome扩展程序,获取有关selectionText的文字

时间:2018-04-05 15:33:53

标签: google-chrome-extension

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

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

function doSmth(info,tab) {
  console.log(info)
}

输出:

  

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

我希望获得包含所选单词的完整句子,而不是“siphonnées”。有可能吗?

1 个答案:

答案 0 :(得分:1)

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

<强> background.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
    });     
}

<强> inject.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()选择文本,然后执行正则表达式以获取句子。