var msg = {
name: '',
type: 'xhr',
success: function(){},
args: {
url: 'exp.com',
type: 'GET',
dataType: 'html',
success: function(){},
error: function(){console.log('failed')
}
};
chrome.runtime.sendMessage(msg, function(response){
console.log(response);
});
我尝试创建一个回调函数,比如success:function(){},error(){},但是不起作用,为什么?
我用的时候
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse){
console.log(message)
});
但无法获得成功:function(){},错误:function(){}?
答案 0 :(得分:0)
不,sendMessage
不支持发送功能。 sendMessage
通过在发送消息之前将对象序列化为JSON字符串来进行操作。 JSON不支持函数(for several reasons),并且将删除消息中的任何函数对象。例如,测试JSON.stringify({ success: function() {} })
:得到结果"{}"
,因为值为函数的键会被删除。
相反,您需要:
在消息中传递一些函数参数,让接收者构建一个新函数。例如,传递success: { action: "display", header: "Here are your results..." }
然后让接收者使用这些参数来构建一个新函数,该函数执行具有给定display
值的header
操作。
在传输前将函数转换为字符串,然后eval
函数字符串在收到时重建函数。这是一个讨厌的黑客,并将删除该功能以前可以访问的任何外部范围,但它将工作。请注意,您需要将函数表达式包装在括号中,以便eval
解析它:
eval( "(" + functionString + ")" );