非表示のポップアップのコンテキストは非アクティブ (閉じている) ため、コンテンツ スクリプトは非表示のポップアップにメッセージを送信できません。
あなたの問題にはいくつかの解決策があります。
オプション 1: メッセージ パッシングなし、ストレージ イベントを使用
chrome.storage
「データベース」が実際には単純なキーと値のストアである場合は、 APIに切り替えてください。この API はコンテンツ スクリプトとポップアップで使用でき、値の変更を通知するイベントが付属しています。
例:
// Get notified of changes (in the popup?)
chrome.storage.onChanged.addListener(function(changes, areaName) {
// Do whatever you want with the changes.
});
// Initialization of the popup (print initial information?)
chrome.storage.local.get({keyName: 'defaultValue'}, function(items) {
// Do something with items.keyName
});
// Content script, storage (remember document title?)
chrome.storage.local.set({keyName: document.title});
オプション 2: バックグラウンド/イベント ページにメッセージを渡す
ポップアップと背景/イベントページは同じプロセスを共有します。ポップアップに関連付けられたデータベースはバックグラウンド ページでも利用でき、その逆も同様です。この方法の概要:
- コンテンツ スクリプトは、バックグラウンド ページにメッセージを送信します。
- 背景ページはデータベースに値を保存します
- ポップアップが開いている場合は、ポップアップのビューを更新します。
- ポップアップが開いている場合(以前に閉じていた場合)、データベースを (直接、または を使用してバックグラウンド ページからデータを読み取ることによって
chrome.runtime.getBackgroundPage
) 読み取り、結果を処理する必要があります。
この回答で、このフローに対応するコードを提供しました。