拡張機能のアイコンをクリックするだけで機能を実行するにはどうしたらいいのか。
ポップアップファイルの中で関数を実行すればいいじゃんね、実行後ページをwindow.close() で閉じれば動作した。
コンテンツスクリプトなんかとやり取りが必要ならそう単純じゃないでしょうが、とりあえずこれで 満足。任意のタイミングで機能を実行したい時は、この操作が確実でいいですね。(まぁキーボード操作も良いんですけど、発火のコントロールが結構難しい)
でもこれだとよくある、ポップアップページで機能の設定をいじる、ということが出来ない。実行時にポップアップページが開かれてしまったら閉じる手間も増えるしナンセンス。
どうするか。
特定のキーを押した状態でアイコンをクリックすると、設定画面が開くようにしたら良いのでは?でもどうやってそれを検知する?(キーボード操作の安定がうんぬん言っといてなんですが)
色々試してみたら、まぁまぁ面倒なことがわかりました。
・まずキーボードを押した離したどーたらはコンテンツスクリプトでないと検知できない。
・履歴の消去はポップアップスクリプトからしか行えない。
・コンテンツスクリプトからポップアップファイルへはメッセージを直接飛ばせない。
・コンテンツスクリプトからバックグラウンドページはメッセージを飛ばせる。
・バックグラウンドページの変数をポップアップファイルから取得できる(これは知らなかった)、 あとメッセージも飛ばせるんじゃなかったかな?
ようやく道が見えました。以前もこういう拡張機能内でのメッセージのやり取りで苦労しましたが、一度作ってしまったら忘れてしまうんですよね。
バックグラウンドにこういうアクセスの仕方があるとは新発見でした ↓
chrome.extension.getBackgroundPage().変数名;
さて、流れとしては、
・onkeydownで、例えば「コントロールキー」が押されているかどうかを監視する ↓
・押されていたらバックグラウンドページに適当なメッセージを飛ばす ↓
・バックグラウンドページ内で変数にメッセージを記録 ↓
・ポップアップが開かれた時に関数を実行、バックグラウンドの中の変数の状態を取得 ↓
・コントロールキーが押されている状態なら関数の実行を中止し、普通にポップアップページが開くようにする。押されていながければ関数を実行、履歴を消去する。
ちなみにコントロールキーを離した時はonkeyupで監視し、同じくバックグラウンドに
状態を保存します。これで「コントロールキーを押しながらアイコンをクリックした時」という条件 が成立します。
これをしておかないと、コントロールキーを一度押せば、いつでも発火するようになってしまう。
こんなとこでしょうか、メッセージ周りをもう少し融通きかせて欲しいもんです。
これで何を作ったかは、次のエントリーで。