我的扩展程序在后台页面中创建一个对象并存储所有
该对象中的配置变量。对象很常见
所有内容脚本,因此背景页面将其发送到
收到连接请求后的内容脚本:
//在background.html中 timObject = {
property1:“你好”,
property2:“MmmMMm”,
property3:[“mmm”,2,3,6,“kkk”],
method1:function(){alert(“方法已被称为”+
this.property1)}
};chrome.extension.onConnect.addListener(function(port){
console.assert(port.name ==“forTimObject”);
port.postMessage({对象:timObject});
});//现在在内容脚本中:
var extensionObject = null;
var port = chrome.extension.connect({name:“forTimObject”});
port.onMessage.addListener(function(msg){
if(msg.object!= null)
extensionObject = msg.object;
否则
alert(“对象为空”);
});警报(extensionObject.property1); //这没关系,警告框显示正确的内容
alert(extensionObject.method1)//未捕获TypeError:对象#没有方法'method1'
我在这里做错了什么?
提前致谢!
答案 0 :(得分:1)
Google Chrome Message Passing mechanism将数据序列化为JSON:
扩展与其内容脚本之间的通信通过使用消息传递来工作[...]消息可以包含任何有效的JSON对象(null,boolean,number,string,array或object)。
如果使用消息传递发送对象,它将转换为JSON。因此,在“stringify”2时,方法“method1”将丢失,因为它无法转换为有效的JSON表达式。不幸的是,它无声地失败并且令人困惑,因为它的其余属性对象被正确序列化。