Chrome扩展消息传递:sendResponse返回空对象
我正在构建Chrome扩展,并且希望在用户单击上下文菜单后获取当前选定的文本。我试图通过从后台脚本向内容脚本发送消息来做到这一点,但从内容脚本返回的对象始终为空。Chrome扩展消息传递:sendResponse返回空对象
下面是相关代码:
background_script.js:
function onClickHandler(info, tab){ chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
chrome.tabs.sendMessage(tabs[0].id, {method: "getSelection"}, undefined, function(response){
console.log(response.data); // <--- this is undefined
});
});
}
chrome.contextMenus.onClicked.addListener(onClickHandler);
content_script.js:
chrome.runtime.onMessage.addListener( function(request, sender, sendResponse) {
if (request.method == "getSelection"){
var selection = window.getSelection(); // <--- this is ok
sendResponse({data: selection});
return true;
}
}
)
的manifest.json
{ "manifest_version": 2,
"name": "Browser Extension",
"description": "Browser Extension",
"version": "0.1",
"background": {
"scripts": [
"background_script.js"
]
},
"content_scripts": [
{
"matches": ["<all_urls>"],
"js": ["content_script.js"]
}
],
"permissions": [
"activeTab",
"contextMenus",
"storage"
]
}
主要问题相似案例见ms是一个缺失的return true;
声明,但我补充说。此外,chrome.tabs.sendMessage
函数有一个新参数options
,但是忽略它还是传递未定义值或空值都没有区别。
谢谢:)
编辑:chrome.runtime.lastError
在SendMessage函数是不确定的所以没有明显的错误!
回答:
正如@wOxxOm指出的那样,这里的问题是我试图对一个复杂的对象进行JSON化。添加.toString的作品。我的错!
以上是 Chrome扩展消息传递:sendResponse返回空对象 的全部内容, 来源链接: utcz.com/qa/265427.html