我将以下消息发送到内容脚本:
chrome.tabs.sendMessage(activeTabId, {
name:'executePageScript',
word:word,
isFirst:isFirst,
jq: function() {}
});
在内容脚本中听取它:
chrome.runtime.onMessage.addListener(function(message, sender, sendResponse) {})
问题是message
对象包含除jq
之外的所有键,其中包含对函数表达式的引用。如果我将函数表达式更改为数字或字符串文字,例如jq:3
或jq:"string"
,则jq
对象中可以使用message
键。所以我似乎无法向内容脚本发送函数表达式(指向函数的指针)。这是真的吗?或者我错过了什么?
答案 0 :(得分:1)
chrome.tabs.sendMessage
与JSON对象一样处理消息。 (它在传递之前序列化数据)
JSON规范不包含函数,即在JSON序列化之前将过滤所有函数。
简单的例子:
var obj = {
a: '1',
b: 2,
c: undefined,
d: null,
e: new Date(),
f: function(){}
}
var str = JSON.stringify(obj);
更新(解决方法):
chrome.tabs.sendMessage(activeTabId, {
name:'executePageScript',
word:word,
isFirst:isFirst,
jq: 'actionName1',
jqParams: [1,2,3]
});
其他地方:
runtimeRouter = {
actionName1: function(a,b,c){
console.log(arguments);
}
}
runtime.onMessage(function(message, sender){
if (message.jq && typeof runtimeRouter[message.jq] === 'function') {
runtimeRouter[message.jq].apply(/*some context or null*/null, message.jqParams || []);
}
});