我发现的最简单的方法是直接从后台脚本运行代码注入:
出身背景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()
然后执行正则表达式以得到一个句子。