2011-09-06 54 views
3

我正在研究Chrome扩展,并遇到以下问题。 当某个事件发生时,我的背景页面使用chrome.tabs.create API创建一个新选项卡(页面)并发送一个对象。消息传递中丢失了对象类型

发送的对象(称为项目)是一个对象的列表,具有称为项目的特定类(原型)。

这里是一些代码:

// in background.html 
chrome.tabs.create({index: 0, url: "results.html"}, function(tab) { 
    chrome.tabs.sendRequest(tab.id, {'items': itemsList}, function(response) { 
     console.log(response.farewall); 
    }); 
});  

在另一方面,在新创建的页面,我收到发送对象

// newpage.html 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
     console.dir(request.items); 
     sendResponse({}); 
    }     
); 

的问题是,当我收到的对象名单,在newpage.html中,对象类型丢失。事实上,在新的background page中使用console.dir()时,itemsList中的对象类型被正确报告,但在newpage.html的接收项目列表对象中没有被正确报告。

我可以手动通过串手动序列化,他background.html的数据,并在newpage.html手动反序列化,但我想知道是否有更好的办法承受这一点,并防止在对象类型(即项目)该列表丢失。

+0

如果'itemsList'已经是一个json对象,为什么不传递没有''items''键的对象呢?多数民众赞成在我通常这样做,我可以直接在接收端使用'request.item_name'访问对象项目...也许我误解了你的问题? –

回答

6

当通过请求传递一个对象时,Chrome浏览器要求它是“JSON-serializable”,这表明它在传输之前编码为JSON字符串,作为字符串传输,然后解码回来。而JSON不支持函数序列化。