質問

私は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, 、オブジェクトタイプが失われます。確かに使用しています console.dir() 新しいで background page, 、オブジェクトはタイプします アイテムリスト 正しく報告されていますが、受信したアイテムリストオブジェクトにはありません newpage.html.

彼のデータを手動でシリアル化することができました background.html 文字列を手動で介して、手動でシリアル化します newpage.html しかし、これを買う余裕があり、リスト内のオブジェクトタイプ(アイテム)が失われるのを防ぐためのより良い方法があるかどうかを知りたいと思います。

役に立ちましたか?

解決

オブジェクトをリクエストに渡すと、Chromeは「JSON-Serializable」であることを要求します。これは、転送前にJSON文字列にエンコードされ、弦として転送され、その後デコードされることを示唆しています。 JSONは機能のシリアル化をサポートしていません。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top