0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Chromeの拡張機能を作っていたら、原因不明のバグ(?)に苛まれた話

Last updated at Posted at 2019-12-28

作りたかったもの

特定のページのdocumentを一定時間ごとに取得して、指定したキーワードが入っていれば、通知を出すという拡張機能。ソースコードじゃなくてdocumentとというところがミソで、そのページは一定時間ごとにサーバーと通信をして、動的に内容を書き換えているため、拡張機能で作ろうという発想に至りました。

開発環境

Google Chrome : 79.0.3945.88(64ビット)
Windows10

ソースコード

background.js
function init(){
	chrome.tabs.query({url:myURL},function(tabs){
		if(tabs.length!=0){
			chrome.tabs.sendMessage(tabs[0].id,{text:"message"},function(callback){
				check(callback);
			});
		}else{
			noti2();//エラー処理
		}
	});
}

function check(callback){
	if(callback==myURL){
		console.log("タブを検出しました。監視モードに移行します");
		chrome.alarms.create("alarms", {periodInMinutes:time});
	}
}
chrome.alarms.onAlarm.addListener(function(request, sender, callback) {
	if(request.name=="alarms"){
		main();//ここにプログラム本体
	}
});
chrome.alarms.create("start/alarms", {delayInMinutes:3});
chrome.alarms.onAlarm.addListener(function(request, sender, callback) {
	if(request.name=="start/alarms"){
		console.log("起動しました");
		init();
	}
});

本来ならページを開いていなくても裏でアクセスし、ドキュメントを取ってきたいところなんですが、どうやってするのか、よく分からなかった(background.jsからリクエストを非同期的に生成している?)ので、せめても、ということで、どこかのタブで開かれていたら、動作するようにしました。

発生したトラブル

上記ソースコードでは、拡張機能を読み込んで3分後に起動するようになっています。この間に特定ページの再読み込みを行う手はずなのですが、この3分の間にも main() が1分ごとに呼ばれ続けていました。

やってみたこと

  • この拡張機能のリロード
  • この拡張機能を停止して再開
  • 他の拡張機能の停止
  • ブラウザの再起動( chrome://restart )
  • 全てのchrome.alarms.createのコメントアウト+拡張機能のリロード

これらを行ってもバグは一向に解消しませんでした。

原因と対策

バグなのか仕様なのかは分かりませんが、拡張機能をリロードしたり、無効化したり、ブラウザを再起動したりしても、chrome.alarms.create{delayInMinutes:1}と指定した時限アラートは残り続けるようです。
解決策としては、

  • 拡張機能を一度削除した上で、もう一度読み込み直す
  • background.jsの先頭でchrome.alarms.clearAll();を呼び出して、今残っている全てのアラートを消す

あたりが考えられます。

最後に

ネットで調べても、古い情報だったり、何故かエラーが出てしまっていたり、セキュリティー上の権限規制が強かったり、謎の挙動を起こしたりする、Google Chromeの拡張機能。もう、私は2度と作りたくないのですが、なかなか優秀な一面もあり、必要に迫られるまで、作りたくないです。
これがバグなのか仕様なのかご存じの方はコメント頂けたら幸いです。

以上。

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?