4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ChromeExtensionを作る際にちょっとしたおもてなしを添える

Posted at

Chrome Extensionはユーザーのインターネット体験におもてなしを添えるのによく利用されますが、ちょっとした心遣いで更におもてないしを添えることが出来るという知見を最近いくつか得たので共有したいと思います。

chrome://での挙動

  • about:blankchrome://history/などのページではcontent scriptを挿入することが出来ないので、基本的にはcontent scriptを利用するものが動かすことができません。
  • 以下の例でも同様ですが、事前にchrome.tabs.onUpdatechrome.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を出してあげると親切なのではないかと思っています。

この件に関してはStack OverflowにChromiumの該当箇所へのリンク付きで詳しく載っています。Chrome Extension Content Script on https://chrome.google.com/webstore/ - Stack Overflow

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?