我正在为与另一个分机(A
)通信的Chrome进行扩展(B
)。我希望A
为B
提供一个函数,但它不会发送。我可以很好地发送字符串。
A
具有以下代码。 rect
是此代码中的函数。
chrome.extension.onRequestExternal.addListener(
function(request, sender, sendResponse) {
obj = {}
obj.permisions = "all"
obj.rect = Rect
alert(obj.permisions+","+obj.rect)
sendResponse(obj);
});
...这段代码很好用。警报显示一个显示“全部”的框,然后打印出该功能。
B
包含以下代码。
chrome.extension.sendRequest(ext[i].id, {}, function(lib) {
alert(lib.permisions+","+lib.rect)
});
这个警报显示“全部,未定义”。函数不能在扩展名之间传递吗?
答案 0 :(得分:4)
虽然您当然可以communicate between extensions,但您只能传递有效的JSON。不幸的是,有效的JSON只包含简单的数据类型(String,Number,Boolean,Array,Object *或Null)。
一种方法是将函数作为String传递,并在接收端使用eval
。可能不安全,但 可行。
*虽然函数在技术上是Object
,但在此上下文中Object
引用上述简单数据类型的名称:值对。