1

多くの方法を試しましたが、ポップアップの終了前にイベントリスナーがトリガーされていません。 SOに関する関連の質問がありますが、何も私のために働いていません。
は、ここに私が試したものです:私は、ユーザーがポップアップを閉じたときに、いくつかのデータを保存したいポップアップクロムの終了時にデータをchrome.storage.syncに保存

chrome.runtime.onSuspend.addListener(function hello() { 
     chrome.storage.sync.set({ 
      'somedata': 'mydata1' // didn't work 
     }, function() {}); 
    }); 

addEventListener("unload", function(event) { 
    chrome.storage.sync.set({ 
     'somedata': 'mydata2' // didn't work 
    }, function() {}); 
}, true); 

。それで全部です。

+0

すべての 'change'と' input'イベントのデータをchrome.storage.syncの一時キーに保存するだけで、ブラウザ/コンピュータが突然クラッシュした場合でもデータを失うことはありません。これは、ユーザーフレンドリーなアプリケーションの仕組みであり、常に最新の状態をすぐに保存します。 – wOxxOm

+0

また、拡張ポップアップアンロードイベントのサポートは、常に[信頼できず、不安定](https://crbug.com/31262)でした。また、あなたの場合、 'sync.set'コールバックは非同期で、呼び出される前に*ポップアップウィンドウで破棄されます。 – wOxxOm

+0

あなたは@wOxxOmが記載されている(つまり、すべての変更時に保存される)か、または "保存"と "キャンセル"ボタンを持っていなければなりません。 UIの観点からは、変更をコミットする明示的な方法と変更をコミットせずにポップアップ/パネルを終了する明確な方法がない限り、ユーザーはすべての変更が永続的な効果を持つと期待します。 – Makyen

答えて

0

回避策を講じなければならないので迷惑です。

バックグラウンドページからデータを保存する必要があるため、ポップアップからデータを渡す必要があります。

chrome.runtime.connectを使用して2つを接続します。ポートが確立されます。ポップアップから保存したいデータが変更された場合は、Port.postMessage()を背景ページに追加できます。

ポップアップが閉じると、Port.onDisconnectが発生し、データの同期準備が整います。

関連する問題