Тип объекта теряется при передаче сообщения - PullRequest
3 голосов
/ 06 сентября 2011

Я работаю над расширением Chrome, и у меня следующая проблема. Когда происходит определенное событие, моя фоновая страница создает новую вкладку (страницу) с chrome.tabs.create API и отправляет объект.

Отправляемый Объект (называемые элементами) представляет собой список объектов, имеющих определенный класс (прототип) с именем 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, но я хотел бы знать, есть ли лучший способ позволить это и предотвратить тип объектов (а именно Пункт) в списке теряется.

1 Ответ

6 голосов
/ 06 сентября 2011

При передаче объекта через запрос Chrome требует, чтобы он был «JSON-serializable», что указывает на то, что он передается в строку JSON перед передачей, передается в виде строки и затем декодируется обратно.И JSON не поддерживает сериализацию функций.

...