3

私はChrome拡張機能に取り組んでおり、次の問題があります。あるイベントが発生すると、私のバックグラウンド ページは APIで新しいタブ (ページ) を作成しchrome.tabs.create、オブジェクトを送信します。

送信されたオブジェクト (アイテムと呼ばれる) は、アイテムと呼ばれる特定のクラス (プロトタイプ) を持つオブジェクトのリストです。

ここにいくつかのコード:

// 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()に newで使用すると、 itemsListbackground pageのオブジェクト タイプは正しく報告されますが、受信したアイテム リスト オブジェクトでは報告されません。newpage.html

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

4

1 に答える 1

6

オブジェクトをリクエストに渡す場合、Chromeではオブジェクトが「JSONシリアル化可能」である必要があります。これは、転送前にオブジェクトがJSON文字列にエンコードされ、文字列として転送されてからデコードされることを示唆しています。また、JSONは関数のシリアル化をサポートしていません。

于 2011-09-06T15:43:47.907 に答える