Chrome 扩展消息作为对象传递
Chrome extension message being passed as object
我正在从内容脚本向后台页面发送消息。该消息是一个 URL,然后在后台得到 ajax 解析。当我 console.log 检索到 background.js
的数据时,控制台日志是纯 html,但是当我将消息发送回我的内容脚本时,消息突然在一个对象中,我不知道为什么。
这是我的代码:
Content_Script.js:
chrome.runtime.sendMessage({greeting: URL}, function(response) {
console.log(response.farewell); //logs an object: Object {farewell: Object}
$('#stats-table2').append(response.farewell); //doesn't output anything.
});
Background.js:
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
getStats(message, sender, sendResponse);
return true;
});
function getStats(message, sender, sendResponse){
$.ajax({
url: message.greeting,
dataType: 'text',
success: function(data) {
var info = $("<div>").html(data)[0].getElementsByTagName("table")[1];
if(info != undefined) {
console.log(info); //logs pure HTML into the console..
sendResponse({farewell:info}); //sends message back.
}
}
});
}
我已经为重要部分添加了评论。我似乎无法弄清楚这一点,这让我发疯。有任何想法吗?谢谢!
您不能通过消息传递 DOM 个节点;数据必须是 JSON 可序列化的,而 DOM 节点不是。
只传递你真正需要的数据(例如textContent
),然后在另一边重建节点。
我正在从内容脚本向后台页面发送消息。该消息是一个 URL,然后在后台得到 ajax 解析。当我 console.log 检索到 background.js
的数据时,控制台日志是纯 html,但是当我将消息发送回我的内容脚本时,消息突然在一个对象中,我不知道为什么。
这是我的代码:
Content_Script.js:
chrome.runtime.sendMessage({greeting: URL}, function(response) {
console.log(response.farewell); //logs an object: Object {farewell: Object}
$('#stats-table2').append(response.farewell); //doesn't output anything.
});
Background.js:
chrome.runtime.onMessage.addListener(
function(message, sender, sendResponse) {
getStats(message, sender, sendResponse);
return true;
});
function getStats(message, sender, sendResponse){
$.ajax({
url: message.greeting,
dataType: 'text',
success: function(data) {
var info = $("<div>").html(data)[0].getElementsByTagName("table")[1];
if(info != undefined) {
console.log(info); //logs pure HTML into the console..
sendResponse({farewell:info}); //sends message back.
}
}
});
}
我已经为重要部分添加了评论。我似乎无法弄清楚这一点,这让我发疯。有任何想法吗?谢谢!
您不能通过消息传递 DOM 个节点;数据必须是 JSON 可序列化的,而 DOM 节点不是。
只传递你真正需要的数据(例如textContent
),然后在另一边重建节点。