我创建了一个基本的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”。有可能吗?
答案 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()
选择文本,然后执行正则表达式以获取句子。