monoの開発ブログ

LDR open in background tab v1.0.8

公開しました。

今回から「次の権限にアクセス可能」の部分に「連携するウェブサイトとの通信」が追加されています。これは、Webページ上のJavaScriptと本拡張機能が手元でプロセス間通信を行うことを意味しており、外部のサイトとの間で本拡張機能がデータを送受信することは (これまで通り) 一切ありません。追加された理由については、後述する実装上の変更点をご覧ください。

機能上の変更点

LDRを開いていない間は拡張機能がメモリから消えるようになりました。省メモリでよいですね。必要になった時には再び起動するわけですが、LDRを開いた瞬間に起動して閉じるまでは開きっぱなしにするようにしているので、いざページを開こうとした時に一瞬もたつくといったことは無いんじゃないかと思います。

これ、Event Pagesを使うだけの話なんですが、久しぶりにコードを見たらなぜかそうなっていなかったので修正したという感じです。

実装上の変更点

今回増えた権限を利用し、WebページのJavaScriptから拡張機能のBackground Pageに対して通信してタブを開くようになりました。これまでは、Webページに通信用のDOM要素を作っておいて、Webページからはその要素に対してイベントを発火し、それを拾ったContent ScriptがさらにBackground Pageと通信するという流れでした。わざわざこのような面倒なことをしていたのは、これしかやりようがないと思っていたからなのですが、実際にはmanifest.jsonexternally_connectableを記述しておくと、条件にマッチするWebページからはchrome.runtime.connectchrome.runtime.sendMessageを利用できるので、これを使うだけでよかったという話でした。

権限の表示なしでもできていたことを公式な方法でやろうとすると権限が増えるというのはちょっと気に入りませんが、変なテクニックとそのための本質的でないコードが削れるのはありがたいことです。

今回は通信を開始する側のJavaScriptも拡張機能内に仕込んでいますが、別にWebサイトの元々のJavaScriptが開始しても問題ないわけで、拡張機能が入っていたらWebサイトと拡張機能が連携して何かするといったことにも応用できますね。