对象传递铬扩展

时间:2010-12-20 19:10:01

标签: google-chrome message

我的扩展程序在后台页面中创建一个对象并存储所有
该对象中的配置变量。对象很常见 所有内容脚本,因此背景页面将其发送到
收到连接请求后的内容脚本:

  

//在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'

我在这里做错了什么?
提前致谢!

1 个答案:

答案 0 :(得分:1)

Google Chrome Message Passing mechanism将数据序列化为JSON:

  

扩展与其内容脚本之间的通信通过使用消息传递来工作[...]消息可以包含任何有效的JSON对象(null,boolean,number,string,array或object)。

如果使用消息传递发送对象,它将转换为JSON。因此,在“stringify”2时,方法“method1”将丢失,因为它无法转换为有效的JSON表达式。不幸的是,它无声地失败并且令人困惑,因为它的其余属性对象被正确序列化。