消息传递中丢失了对象类型

时间:2011-09-06 13:20:23

标签: javascript google-chrome-extension message-passing

我正在使用Chrome扩展程序,我遇到以下问题。 当某个事件发生时,我的后台页面会创建一个带有chrome.tabs.create API的新标签页(页面)并发送一个对象。

发送的Object(称为items)是一个对象列表,具有一个名为Item的特定类(原型)。

这里有一些代码:

// 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中,对象类型丢失了。确实在新console.dir()中使用background page,正确报告了 itemsList 中的对象类型,但未在newpage.html中的已接收项目列表对象中报告。

我可以手动通过字符串手动序列化background.html中的数据,并在newpage.html中手动反序列化,但我想知道是否有更好的方法来支付这一点并防止列表中的对象类型(即Item)将丢失。

1 个答案:

答案 0 :(得分:6)

当通过请求传递对象时,Chrome要求它为“JSON可序列化”,这暗示它在传输之前被编码为JSON字符串,作为字符串传输,然后解码回来。 JSON不支持函数序列化。