如何使windows.getSelection返回所选文本

时间:2019-06-20 15:35:07

标签: google-chrome-extension

谁能告诉我为什么我无法使用windows.getSelection()。toString()在任何给定页面上获得所选文本的字符串?

该脚本在后台运行,即使我将其命名为popup.js。

我可以找到的所有内容都显示了这种变化,但是在我的代码中,它始终返回null。 我在按下快捷键组合时调用window.getSelection()。肯定选择了文本,但结果始终为空。

manifest.json
{

  "name": "CM_TextDiff",
  "version": "1.0",
  "manifest_version": 2,


  "description": "Highlight changes in two lines of text. Useful to language teachers to highlight corrections.",
  "icons": {
    "128": "compare128.png"
  },

  "background": {
    "scripts": [
      "popup.js"
    ]
  },

    "browser_action": {
      "default_title": "highlight your corrections",
      "default_popup": "popup.html"
    },

    "permissions": [
      "tabs",
      "activeTab",
      "http://*/*", 
      "https://*/*",
      "clipboardRead",
      "clipboardWrite",
      "contextMenus"      
    ],

popup.js
chrome.commands.onCommand.addListener(function(command) {
    console.log('Command:', command);
    getSelectedText();
});

function getSelectedText(){
    alert ("The text content of the selection:\n" + window.getSelection().toString ());
}

我希望它会显示一个弹出页面,其中包含在页面上选择的文本。但是,结果始终是空字符串。

1 个答案:

答案 0 :(得分:0)

对于其他受此困扰的人:

确保在权限中具有“活动标签”。

要从活动标签中拉出选定的文本,请执行以下操作:

function getSelectedText(){
    chrome.tabs.executeScript({code: 'getSelection().toString()'}, 
    res => callback(res)  //res => { alert(res[0]) });
    );
}

var blah;
function callback(results){
    console.log(results);
    blah = results[0];
}

“等等”将在调用过程中包含选定的文本,您可以在其中使用它。

感谢wOxxOm向我指出正确的方向并给予我推动。