Google Chrome 扩展 - 有没有办法向任何选项卡上的文本选择/突出显示事件添加侦听器

Kar*_*ana 5 javascript google-chrome-extension

每次用户选择/突出显示任何选项卡上的某些文本时,我都试图触发一段代码。

当我突出显示某些文本然后单击我的扩展程序时,我可以运行 javascript。我已经阅读了一些 chrome api,但它们似乎都不起作用。 https://developer.chrome.com/extensions/api_index

chrome.browserAction.onClicked.addListener(function() {
    alert(window.getSelection().toString());
});
Run Code Online (Sandbox Code Playgroud)

当我突出显示某些文本时,我无法立即运行代码。是否有一个 API 已经可以处理这个问题了?

nab*_*ab. 1

你应该只添加一个缓冲区:

店铺选择

当您谈论从任何选项卡中进行选择时,您应该使用存储 api并引用选项卡 ID以供进一步使用。

document.onmouseup = function() { 
    chrome.tabs.getCurrent(function(_tabId){
        if(_tabId){
            var _SELECTION = {};
            _SELECTION[tabId] = window.getSelection().toString();
            chrome.storage.local.set(_SELECTION, function() {
                console.log('Selection saved: ', _SELECTION[tabId]);
            });
        }
    });
}
Run Code Online (Sandbox Code Playgroud)

单击扩展程序时使用它

chrome.browserAction.onClicked.addListener(function() {
    chrome.tabs.getCurrent(function(_tabId){
        if(_tabId){
            chrome.storage.local.get(_tabId, function(result) {
                alert('Selection restored: ' + result[tabId].txt);
            });
        }

    });
});
Run Code Online (Sandbox Code Playgroud)

显现

不要忘记更新您的manifest.json以设置相应的权限

{
    ...

    "permissions": [
        "storage",
        "tabs"
    ],

    ...
}
Run Code Online (Sandbox Code Playgroud)

笔记

  1. 我使用storage.local,因为剪贴板应该保存在本地计算机上,但如果你想跨计算机共享它,你可以使用storage.sync。更多内容请阅读文档
  2. 我会使用contextMenus。如果您突出显示文本以右键单击并执行操作,则更有意义。