Тип объекта теряется при передаче сообщения


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

Отправленный объект (называемый 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.

Я мог бы вручную сериализовать данные в he background.html вручную через строку и вручную де-сериализовать в newpage.html, но я хотел бы знать, есть ли лучший способ позволить себе это и предотвратить потерю типа объектов (а именно элемента) в списке.
1 3

1 ответ:

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