【问题标题】:Object type is lost in message passing对象类型在消息传递中丢失
【发布时间】:2011-09-06 13:20:23
【问题描述】:

我正在开发 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 中反序列化,但我想知道是否有更好的方法来负担这个并防止对象类型(即列表中的项目)丢失。

【问题讨论】:

  • 如果itemsList 已经是一个json 对象,为什么不直接传递没有'items' 键的对象呢?这就是我通常这样做的方式,我可以使用request.item_name 直接在接收端访问对象项......也许我误解了你的要求?

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


【解决方案1】:

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

【讨论】:

    猜你喜欢
    • 2012-06-21
    • 1970-01-01
    • 2017-06-12
    • 2022-01-14
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多