ページ mod と通信し、問題に直面するコンテキスト メニューに取り組んでいます。
ページを更新しない限り、ビュー内のページ/タブを右クリックして通信を送信できます。ページを更新すると、新しいワーカーが作成され、コンテキスト メニューがワーカーと通信できません。
現在、同一のワーカーが 2 つありますが、古いワーカーの有効期限が切れたようです。つまり、 onMessage: のこのループは、最初のワーカーを取得するため機能しません。
for (index = 0; index < workers.length; index += 1) {
if (workers[index].tab.index === tabs.activeTab.index) {
workers[index].port.emit("rightClick", string, ss.storage.product);
}
}
更新時に古いワーカーを削除しようとしていましたが、そうするオプションがないようです。労働者の扱いについて根本的に何かが欠けていますか?
私が受け取ったエラーは次のとおりです: エラー: ページは現在非表示になっており、再び表示されるまで使用できません。
これは、ワーカーに関する限り、同じタブで新しいページを見ているという事実と一致しています。worker.on('detach', function(){}) がこれを処理するはずだと思っていましたが、これはタブを閉じたときだけのようです。
アドバイスをいただければ幸いです。
追加 OK 少し休憩した後、別の場所で推奨されている detachWorker 関数を detach に使用することにしました。以下のように pageMod オブジェクトの上部に配置しました
// Clean up duplicate worker
for (index in workers) {
if(workers[index].url === worker.url && workers[index].tab.index === worker.tab.index) {
detachWorker(workers[index], workers);
}
}
これは(今のところ)問題を解決しますが、正しいアプローチではないと思います。解決策の進歩:)。