JS - Chrome扩展程序 - 获取选择

时间:2017-02-16 08:37:55

标签: javascript google-chrome google-chrome-extension

尝试开发chrome扩展时的一个小问题。目标很简单,我知道有关于此事的现有帖子,但无论我发现什么都不适合我。感觉就像在普通脚本(html / js)中工作的内容在chrome扩展中不起作用。

我正在尝试进行一个简单的扩展,点击它的图标将获得选择(至少文本,如果可能的话更多信息)但不知何故它不起作用。我得到一个选择项目,但它是一个空的选择。

这是代码。 的manifest.json

{
  "manifest_version": 2,

  "name": "Paster",
  "description": "Bla",
  "version": "1.0",

  "browser_action": {
    "default_icon": "camera.png",
    "default_title": "Bla"
  },

  "background": {
    "page": "background.html"
  },

  "permissions": [
    "tabs",
    "activeTab",
    "https://ajax.googleapis.com/",
    "clipboardRead",
    "clipboardWrite"
  ]
}

background.html

<textarea id="temp_textarea_draft_paster"></textarea>
<div>BLA BLA BLA</div>
<script src="jquery-3.1.1.min.js"></script>
<script src="background.js"></script>

background.js

chrome.browserAction.onClicked.addListener(function() {
    getSelectionText()
});

getSelectionText = function (info, tab) {
    selection = window.getSelection();
    console.log(selection);
    alert('yeah' + selection);
};

如果我从background.html打开开发控制台,我会得到console.log但是选择为空,无论我选择了什么。警报弹出,但只是'是'。

如果我转到chrome-extensions://ext-id/background.html页面并在那里选择一个文本然后点击按钮,它就可以选择包含其数据......为什么?感觉扩展程序无法从选项卡中获取选择,只需从background.html页面获取。

1 个答案:

答案 0 :(得分:1)

经过大量研究后我找到了解决方案。是的,阅读文档(再次)建议有帮助,但我仍然认为它没有太清楚的解释。但是,如果有人遇到同样的问题,则必须理解background.js仅链接到background.html,但不会链接到活动选项卡上显示的页面内容。

相反,内容脚本在活动页面中被“添加”或“应用”,因此可以使用window.getSelection()等函数。

步骤如下:

在manifest.json中,请参阅您希望在活动页面内“插入”的content_scripts以及相关的“匹配”。 (它影响的页面,例如“”。

然后,当触发浏览器操作时,您的后台页面可以向内容脚本发送消息(https://developer.chrome.com/extensions/messaging)(单击图标),内容脚本将收听此消息并使用getSelection结果进行回复。