わすれっぽいきみえ

みらいのじぶんにやさしくしてやる

chrome拡張を触っていた

明けましておめでとうございます。 すでに新年明けて半月経ちましたが、今年も宜しくお願いします。

chrome拡張を入れるばっかりで自分ではあまり作らないなと思ったのと、
javascript全然使ってないなと思ったのとで、いっちょ触ってみるかと思って触っていた。

といってもまず作り方自体を忘れていて、簡単な作り方を以下の記事でおさらいした。ちょっと前にはてブホッテントリに入った記事なので、入門はそちらを参照されたし。

paiza.hatenablog.com

以下自分で触ってドキュメント読んでわかったメモを書いておく。何も目新しいものはない。

  • alarms
    • javascriptでタイマー作るなら普通setTimeoutとかsetIntervalを使うが、chrome extensionではalarmsを使う
  • notifications
    • 通知ボックス出したいならnotificationsを使う
  • storage
    • chromeWeb Storageを使いたいなら、直接Web Storage APIも使えるけど、このAPIを使うことが推奨されている
    • chrome.storage.sync だと同一アカウントでログインしたすべてのchromeブラウザで共有できるデータを同期してくれて、 chrome.storage.local を使うとその拡張が有効になっている特定ブラウザでのみデータが保存される
    • 公式ドキュメントに「当然使いすぎると詰まるよ」と注意書きがある
  • tabs
    • 開いているタブの情報を取ってきて色々できるもの
    • タブの情報更新の onUpdated とか使ってみるとなかなか癖があるので、なんらかのイベントリスナーを登録するなら、ちゃんと発火タイミングを調べたほうが良い。
  • webRequest
    • chromeから送ったリクエストの情報を取ってきて色々できるもの
    • コネクション確立前、リクエスト送る前、送った後など割と色々なイベント発火タイミングがあるので、これもちゃんと発火タイミングを調べたほうが良い。

何しようかなと思って考えてたのは「あるURLを叩いた時にレスポンスが返ってくるまでにかかる時間を計測してnotification飛ばしてくれる君」だった。はっきり言ってchrome developer toolsでできることだし、読み込む度にnotify飛んでくるのこの上なくウザいのわかっていたんだが、notification飛ばすのに何したらいいんだろうとか、setTimeoutじゃなくてchrome.alarm使うとか、細かい部分をまるで分かってないので、まあまあやってて色々わかったので面白かった。

tabsでリクエスト先URLが書き換わったらwebRequestの onSendHeaders でリクエスト直前の時間を取って、 onCompleted でリクエスト完了時間を取って時間の差分出したら、ものすごくざっくりしたリクエストからレスポンスまでの時間が出せるかなーと思ったが、 webRequestの onSendHeaders はtabsの onUpdated よりも先にイベントが発火するので、tabsで指定したURLのリクエストからレスポンスまでの時間を取るには先にtabsで切り替えようとしているURLをwebRequestのfilterに渡してやる仕組みが必要そうだった。chrome extension test · GitHubに適当なjsを残しているが、後半にある counter ってやつで、順番がわかった。

tabsにこだわるよりももう少し良い方法が多分あるけど、それはまた今度なんとなく調べてみよう。