サマリー
Chromeの拡張機能でChromeのバージョンを記録しておき、バージョンアップされたら通知される機能を作りたかったが失敗した。
原因としては、
- バージョンを取得するAPIが存在しない
- タブに表示している内容を取得しようとしても、chrome://version は対象外
色々試したが、拡張機能では、実現できなかったことを記録に残すための記事。
背景
Seleniumを使ってChromeを操作させているプログラムを配布した際に、Chromeのバージョンアップにより、ChromeDriverの更新が必要になることが多々ある。エラーが出るたびに、イライラするので、事前にキャッチしておきたく、拡張機能による開発を検討した。
設計
- Chromeを起動した際に、現在のChromeのバージョンを取得する★
- 取得した結果と日付をlocalstrageに保存する
- localstrageに保存された結果と異なる場合は、ポップアップで更新されたこととバージョンを表示する
- localstrageに保存された結果と同一の場合は、なにもしない。
- 拡張機能のボタンをクリックすると現在のバージョンと最後に確認した日付を表示する
バージョンの取得
★印のところで2パターンで検討した。
- Extensionで使用できるAPIを利用する
- 「chrome://version」をスクレイピングする
起動時に実行するため、ChromeExtensionの中で「Event Page (Background Page)」
を使うことで、
※他には、「Content Scripts」「Browser Action (Page Action)」があり、実行するタイミングで変わる
1に関しては、Google Extensionで利用できるAPIがあると思っていたところ、存在しなかったです。
APIドキュメント
2に関しては、「chrome://version」を開き、バージョンをスクレイピングで取得すればよいと考えた。
実際に、Extensionでも開いたページのリンクや画像を一括取得するものがあるので、対応可能と考えたが、調べたところ、Permissionの設定が必要であった。
その設定に追加できるプロトコルが、http、https、fileであり、「chrome://」を追加できなかった。
また、bookmarksは存在するが、versionの権限を追加することはできなかった。
permissions
その他、調査が必要なこと
-
localStorageの使い方。バックグラウンドでは使えない?
参考サイト
https://engineering.webstudio168.jp/2023/02/chrome-extension-background-localstorage/ -
backgroundでの実行時に、JavaScriptのwindowオブジェクトを取得できない。→MessageAPIを使って受け取る方法?
参考サイト
https://zenn.dev/ellreka/articles/799632c02d1cb5 -
window.navigator.userAgentDataでchromeのバージョンが取得できそう?
参考サイト
https://developer.mozilla.org/ja/docs/Web/API/Navigator/userAgentData
参考ページ
まとめ
かんたんに作れると思っていたが、意外に難しく、現時点ではうまく行かなかったことを記録に残しておき、今後調査する。
背景を満たすだけであれば、なにかしらの方法があるかもしれない。また進捗があれば、更新することにする。