Chrome拡張機能が停止されたことをコンテンツスクリプトが検知するには?
Q&A
Closed
Chrome拡張機能が削除または無効化されたときに、ページに注入されて動いているままのコンテンツスクリプトがそれを検知するにはどうするのがよいでしょうか?
コンテンツスクリプトがDOMに追加した要素を削除するなどのお片付けをして、自分自身の動きもそこで止めたいのです。
0
Q&A
Closed
Chrome拡張機能が削除または無効化されたときに、ページに注入されて動いているままのコンテンツスクリプトがそれを検知するにはどうするのがよいでしょうか?
コンテンツスクリプトがDOMに追加した要素を削除するなどのお片付けをして、自分自身の動きもそこで止めたいのです。
ここを参考にして解決しました。
https://stackoverflow.com/q/44329086
https://stackoverflow.com/q/53939205
まず試したのは、こう。
let extentionEnabled = true;
const onEnabled = () => {
}
const onDisabled = () => {
}
const validityChecker = () => {
enabled = !!(chrome.runtime?.id);
if (extentionEnabled && !enabled) {
onDisabled();
} else if (!extentionEnabled && enabled) {
onEnabled();
}
extentionEnabled = enabled;
};
setInterval(validityChecker, 1500);
スマートだと思えませんが他に方法が無いのではしょうがないですね。これで拡張機能が無効にされたり削除されたときにはonDisabled
が呼ばれるようになりました。
だがしかし、その後拡張機能を再び有効にしてもonEnabled
は呼ばれません。chrome.runtime.id
はundefined
のままです。
考えてみれば、それはそう。コンテンツスクリプトはブラウザがページを読み込んだときにページに注入されて動き出すものだから、再び動かすためにはページをリロードしないといけないし、そのときスクリプトは置き換わるので上記のコードは意味がない。
なので、やるなら以下のようにして拡張機能の削除や無効化には対応する。
const onDisabled = () => {
}
let pingTimer;
const validityChecker = () => {
if (chrome.runtime?.id) {
return;
}
clearInterval(pingTimer);
onDisabled();
};
pingTimer = setInterval(validityChecker, 1500);
で、再び有効化したときは自分でページをリロードしてねという仕様にするしかないかなと。