Chrome 拡張機能メモ
- カテゴリ:
- JavaScript
- Chrome
- コメント数:
- Comments: 0
◆ localStorage の監視で sendMessage を減らせるかも
◆ タブ更新したときの URL は info じゃなくて tab の方を使う
オプション画面での設定変更をバックグラウンドページで知りたい
設定変更するたびに sendMessage やるのかー と思ってたのですが 設定変更したら普通はローカルストレージを更新しますよねということは バックグラウンドページでローカルストレージの更新を監視すればいいんです
window.addEventListener("storage", function(eve){
reload()
}, false)
reload()
}, false)
こんなの書いておくと ローカルストレージが更新されたときに reload 関数を実行できます
このイベントはちょっと賢くて 存在しないキーを消す操作や上書きしたけど値が変わってなかったときは発火しません
また 別のページで変更された場合だけでこのリスナを設定したページ内で更新しても発火しません
もちろん 読み取りでも発火はしないです
タブ更新時の URL 取得
タブの更新は chrome.tabs.onUpdated.addListener で監視できますchrome.tabs.onUpdated.addListener(function(tabid, info, tab){
// info.url
// tab.url
})
引数は上の通りで tabid, info, tab です// info.url
// tab.url
})
このイベントは タブを開いたり タブのページが遷移したりリロードしたりで発火します
URL を取り出したいときは info と tab のどちらのオブジェクトからもとれますが tab.url のほうを使わないとダメです
info は changeInfo で変更があった情報が入ります
つまり F5 などのリロードでは url プロパティが存在しません
タブ開いたりページ遷移だと入ってるので info.url でいけると思ってしまうかもしれないですがリロードのときにちゃんと動かなくなるので注意です
逆に info.url があるかどうかでリロードかどうかを判定するという使い方もできそうです
タブ更新のイベントは 2 回発生する
上の chrome.tabs.onUpdated.addListener ですが ここで設定した関数は 2 回呼び出されます状態が loading のときと complete のときです
それぞれの文字が info.status に入るので処理は if 文でムダに 2 回処理をしないようにしないといけないです