-1

私はchrome.storage.syncにTimerオブジェクトを格納しています。私はTimerオブジェクトを取得し、その方法の一つ、countdown()を呼び出そうとすると、この方法は存在しません:検索時にchrome.storage.syncに格納されたオブジェクトのメソッドが関数ではないのはなぜですか?

let clock = new Timer(1); 
    let key = "myKey"; 
    chrome.storage.sync.set({[key]: clock}); 
    chrome.storage.sync.get(key, function(items){ 
    items[key].countdown(); 
    }); 

クロームデベロッパーツールは言う:「応答でエラーがstorage.getする:TypeError例外:項目[キー]。カウントダウンは機能ではありません。

+0

なぜこれを 'storage.sync'に保存していますか?同じプロファイルにリンクされた異なるマシン間で同期することを実際に期待していますか?それは確かにそれが適切なものであるとは思われません。 – Makyen

答えて

0

chrome.storageに関数を直接格納することはできません。

StorageArea.set()のドキュメントはきわめて明確である[重点鉱山は]:

Primitive values such as numbers will serialize as expected. Values with a typeof "object" and "function" will typically serialize to {}, with the exception of Array (serializes as expected), Date, and Regex (serialize using their String representation).

これは(うまくプリミティブで構成されるオブジェクトをシリアライズうJSON)JSONのサブセットであるように思われます。しかし、完全なJSON実装であっても、関数を格納することはできません。「JSONは、関数、正規表現、日付などのより複雑なデータ型をネイティブに表現するものではありません。

関連する問題