Noz*_*rum 6 javascript google-chrome
我正在开发一个chrome扩展,我想用chrome.runtime.sendMessage发送一个对象(带有一些函数).
现在做这样的事情
chrome.runtime.sendMessage({something: "Funny"});
Run Code Online (Sandbox Code Playgroud)
工作得很好.但是,只要我想创建更复杂的东西,我的消息似乎就是一个空对象.
function FunnyFunction() {
return 42;
}
var exampleObject = new Object();
exampleObject.FunnyFunction = FunnyFunction;
chrome.runtime.sendMessage({something: exampleObject });
Run Code Online (Sandbox Code Playgroud)
现在在接收端,它成功地注册了一条消息,并检测到它有一个键"某事".但是exampleObject总是空的.里面没有功能.
chrome.runtime.onMessage.addListener(
function (request, sender, sendResponse) {
console.log("got message: ");
console.log(request);
if ('something' in request) {
exampleObject = request.exampleObject;
console.log(exampleObject);
}
}
);
Run Code Online (Sandbox Code Playgroud)
请求始终是一个对象
Object {something: Object}
Run Code Online (Sandbox Code Playgroud)
但是'something'背后的对象,应该是exampleObject - 我之前用2个函数定义的对象 - 总是空的.
Object {}
Run Code Online (Sandbox Code Playgroud)
当我尝试做exampleObject.FunnyFunction(); 它显然崩溃了,因为它没有这样的成员.
我在这做错了什么?
您无法通过Message Passing API传递函数,因为它使用序列化的JSON作为数据交换格式,该格式不支持将函数作为基本类型。理想情况下,您已经可以在需要的上下文中使用该功能(例如,背景/事件页面,弹出页面等),但是,在这种情况下,您需要将功能从扩展的一部分传递到另一部分,您将需要用于JSON.stringify
将该函数序列化为JSON字符串,另一方面,需要JSON.parse
用于将该JSON字符串反序列化为原始函数,然后可以在其上使用它。
归档时间: |
|
查看次数: |
2091 次 |
最近记录: |