Chrome Extensionはユーザーのインターネット体験におもてなしを添えるのによく利用されますが、ちょっとした心遣いで更におもてないしを添えることが出来るという知見を最近いくつか得たので共有したいと思います。
chrome://
での挙動
-
about:blank
やchrome://history/
などのページではcontent scriptを挿入することが出来ないので、基本的にはcontent scriptを利用するものが動かすことができません。 - 以下の例でも同様ですが、事前に
chrome.tabs.onUpdate
やchrome.tabs.onActivated
などを利用してpopup buttonを押せなくしておくなどするとユーザーに優しいのではないでしょうか。
インストール直後の挙動
インストール後にcontent scriptをインジェクションする場合、その前にタブをリロードする必要がありますが、これを良い感じに事前にハンドリングする方法が無いので、ちょっとした工夫があると良さそうです。
- 1つの案としては
chrome.runtime.onInstalled
などでそういう旨を出すページを表示するのも良いでしょう。 - 自分の場合は
chrome.tabs.executeScript
で挿入に失敗した際にはcallback
の中でchrome.runtime.lastError
に値が入るので、それを確認してconfirm
を出して、chrome.tabs.reload
でreloadするという感じにしています。
Chrome Web Storeなどでの挙動
-
Chrome Web StoreでExtensionを利用してcontent scriptを挿入しようとすると、Chromeから
The extensions gallery cannot be scripted.
というerror message付きで例外が飛んできます。- 以前は
--allow-scripting-gallery
の起動オプションを付けることで許可できましたがChrome35で削除されました
- 以前は
- それとGoogleのログインページでも
The sign-in page cannot be scripted.
という例外が同様に飛んできます。 - これらのページではリロードしても動くように出来ることはないので、前述のようにエラーを出すと不都合があります。
- Chromeが返すエラーメッセージに
cannot be scripted
が含まれるのはこの2種類だけなので、そのあたりで比較して良い感じのalertを出してあげると親切なのではないかと思っています。
- Chromeが返すエラーメッセージに
この件に関してはStack OverflowにChromiumの該当箇所へのリンク付きで詳しく載っています。Chrome Extension Content Script on https://chrome.google.com/webstore/ - Stack Overflow