Javascript 来自内容脚本的Chrome扩展响应未定义
我有一个简单的Chrome扩展,代码如下。单击弹出窗口中的按钮时,我希望从“用户浏览器”选项卡复制所选文本 问题:从my Content Script selection.js返回的所有响应都未定义 任何帮助都将不胜感激:) manifest.jsonJavascript 来自内容脚本的Chrome扩展响应未定义,javascript,google-chrome,google-chrome-extension,content-script,Javascript,Google Chrome,Google Chrome Extension,Content Script,我有一个简单的Chrome扩展,代码如下。单击弹出窗口中的按钮时,我希望从“用户浏览器”选项卡复制所选文本 问题:从my Content Script selection.js返回的所有响应都未定义 任何帮助都将不胜感激:) manifest.json { "manifest_version": 2, "name": "Selected Text", "description": "copying your highlighted text", "version": "0.1"
{
"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
}
]
}
selection.js
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else
sendResponse({}); // snub them.
});
请记住,在更改代码以同时执行这两项操作时:
似乎只有执行2)才能刷新内容脚本,而弹出窗口将刷新1)。1。要做的第一件事是扩展:在内容脚本的消息侦听器内设置一个断点,然后单步执行弹出代码。2.尝试用现代的
sendMessage
和query({active:true,currentWindow:true},
)替换不推荐的sendRequest
和getSelected
方法(请参见API)。您可能还想使用推荐的chrome.runtime
而不是chrome.extension
,谢谢您的提示。我有一些有报酬的工作需要关注,但我会再次关注,并在有机会时更新
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);
chrome.extension.onMessage.addListener(function(request, sender, sendResponse) {
if (request.method == "getSelection")
sendResponse({data: window.getSelection().toString()});
else
sendResponse({}); // snub them.
});