尝试开发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页面获取。
答案 0 :(得分:1)
经过大量研究后我找到了解决方案。是的,阅读文档(再次)建议有帮助,但我仍然认为它没有太清楚的解释。但是,如果有人遇到同样的问题,则必须理解background.js仅链接到background.html,但不会链接到活动选项卡上显示的页面内容。
相反,内容脚本在活动页面中被“添加”或“应用”,因此可以使用window.getSelection()等函数。
步骤如下:
在manifest.json中,请参阅您希望在活动页面内“插入”的content_scripts以及相关的“匹配”。 (它影响的页面,例如“”。
然后,当触发浏览器操作时,您的后台页面可以向内容脚本发送消息(https://developer.chrome.com/extensions/messaging)(单击图标),内容脚本将收听此消息并使用getSelection结果进行回复。