【发布时间】:2016-01-02 12:35:11
【问题描述】:
我有一个简单的 Chrome 扩展程序,代码如下。单击弹出窗口中的按钮时,我想从用户浏览器选项卡中复制选定的文本。
问题:从我的内容脚本 selection.js 返回的所有响应都是未定义的
任何帮助将不胜感激:)
manifest.json
{
"manifest_version": 2,
"name": "Selected Text",
"description": "copying your highlighted text",
"version": "0.1",
"browser_action": {
"default_title": "Selected Text",
"default_icon": "icon.png",
"default_popup": "popup.html"
},
"permissions": [
"tabs",
"<all_urls>"
],
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["selection.js"],
"run_at": "document_start",
"all_frames": true
}
]
}
popup.html
<!doctype html>
<html>
<head>
<title>Selected Text</title>
<script src="popup.js"></script>
</head>
<body>
<h1>Selected Text</h1>
<p id="text">Not Selected</p>
<button id="checkPage">Copy Highlighted Text!</button>
</body>
</html>
popup.js
function getSelectedText() {
chrome.tabs.getSelected(null, function(tab) {
chrome.tabs.sendRequest(tab.id, {method: "getSelection"}, function(response) {
// PROBLEM: response is always undefined
var text = response.data;
document.getElementById("text").innerHTML = text;
});
});
};
document.addEventListener('DOMContentLoaded', function() {
var checkPageButton = document.getElementById('checkPage');
checkPageButton.addEventListener('click', function() {
getSelectedText();
}, false);
}, false);
selection.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else
sendResponse({}); // snub them.
});
【问题讨论】:
-
1.首先要做的是debug 扩展:在内容脚本的消息侦听器中设置断点,然后单步执行弹出代码。 2. 尝试用现代的
sendMessage和query({active: true, currentWindow: true}, ...替换已弃用的sendRequest和getSelected方法(参见chrome.tabs API)。您可能还想使用推荐的chrome.runtime而不是chrome.extension -
感谢您的提示。我有一些需要专注的有偿工作,但我会在有机会时再次回到这个工作并更新
标签: javascript google-chrome google-chrome-extension content-script