愛と勇気と缶ビール

ふしぎとぼくらはなにをしたらよいか

初めて真面目にChrome extension作ったのでチラ裏メモ

まだ公開してないけどね。

  • デスクトップ自体のアイドル(ユーザ操作がない)状態やロック状態はchrome.idleで取れる。ユーザ操作がないと判断するまでのtimeoutも自分で決められる。最短15sec。
  • Chrome自体からフォーカスが離れたかどうかはchrome.windows使って判定すればオーケー (chrome.app.windowではない)
  • 参考: Detect browser focus/out-of-focus via Google Chrome Extension - Stack Overflow (厳密に言うとonFocusChangedのコールバックに渡ってくるのはwindowではなくwindowIdなのでこのコードは間違っている)
  • chrome.sendMessageとかmessagePort系とかの機能はchrome.storage.onChangedで代用できないこともないが、storageを使うのは永続化したいデータのみに留めておいた方が無難だろう
  • chrome.browserAction.setPopupで右上ボタンにポップアップを設定するとchrome.browserAction.onClickedが効かなくなるが、そこはpopup内のjsからbackground pageに対してchrome.runtime.connectし、chrome.runtime.onConnectedをシグナルにして処理すれば問題ない
  • もちろんchrome.runtime.onConnectedはclick eventの代替ではないが、どうせpopupとbackground pageの間でメッセージングするんでしょうと。
  • popupのhtmlの中にanchorがあるとChromeが勝手にfocusしてうざい場合はanchor elementにtabindex="-1"を指定する。ってもうちょっとマシな方法ないんかい。(http://stackoverflow.com/questions/16701082/chrome-extension-first-link-is-auto-focused-in-popup)
  • Chrome extensionの中でgapi (いわゆるGoogle系APIのJSライブラリ)をOAuth2の認可通した上で使いたい場合は chrome.identity.getAuthTokenしてのち得られたtokenを gapi.auth.setToken({ access_token: token }); すればよい
  • 読み込み方はこんな感じで (http://stackoverflow.com/questions/18681803/loading-google-api-javascript-client-library-into-chrome-extension)
  • chrome.i18nは普通に使える、それ以上でも以下でもない

総じて、extension開発は、クロスブラウザとか気にせずバリバリ色んな機能を使えるので気持ちがいい。情弱なのでdialog elementとか初めて使った。こういうのがちゃんと使えると、ダイロアグ的なものを出すためだけにUI系のライブラリを入れる必要がなくなるのでうれしい。

あとVue.js割と使いやすかった。小規模なコードだから足りない部分が気にならないだけなのかもだけど。