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

回到顶部