Chrome Extension(拡張機能) ことはじめ

Chrome Extension とは

Chrome Extension とは、Google Chrome の機能を拡張したり修正できる小さなソフトウエア。ユーザーインターフェイスは HTML+CSS で、ロジックは Javascript で作るので、実装がとても簡単。

Chrome Extension の種類には、

  • Browser Action
  • Page Action
  • Override Pages
  • Themes

などがあるのだけど、このうち Browser Action が、一番そのイメージに近いと思う。このポストは、その Browser Action を開発者向けに概観したもの。

ちなみに日本語版 Chrome では、この Extension を「拡張機能」と訳している。


Browser Action とは

Browser Action は、多くの場合、画面に独自のアイコンを追加する。

Chrome Browser Action Icon

これらのアイコンをクリックすると、ポップアップウィンドウを表示したり(左のアイコン)、特定の機能を実行したりする。

Browser Action の構成要素

Browser Action は、以下の要素から構成される。これらの要素は、概念的に分かれているだけでなく、物理的にも(HTML ファイルや JS ファイルとして)お互い独立している。

  • アイコン
  • ポップアップウィンドウ
  • バックグラウンドページ
  • コンテンツスクリプト
  • オプションページ
  • manifest.json

このうち、manifest.json は別格で、Extension 全体の設定を JSON 形式で記述したものであって、どんな Extension を作るときにも必要になる。

それ以外の構成要素は、機能に応じて必要になる。

必ずしも全て必要ではならないけど、ちょっとした機能を盛り込んだ Browser Action であれば、アイコン、ポップアップウィンドウ、バックグラウンドページくらいは最低限必要になると思う。

Extension の実体は、構成要素全てを crx というファイルにまとめたもの。ただし開発段階では、ファイルを同一フォルダに置いた状態で動かすこともできる。

構成要素 ファイルのフォーマット どういうときに必要? 機能
アイコン 画像ファイル ツールバーにボタンを表示したいとき ツールバーに表示され、ボタンとして機能する。
ポップアップウィンドウ HTML ファイル ツールバーのボタンを押した後にメニューを表示したいとき アイコンがクリックされたときに画面に表示される。
表示されている間しか維持されないので、情報を長時間保持できない。バックグラウンドページなどとの間で情報のやりとりをするための UI として使う。
バックグラウンドページ HTML ファイル ページ遷移に関わらず、ブラウザ起動中継続して情報を保持したり、処理を行いたいとき ブラウザ起動時に内容が読み込まれ、ブラウザの終了までバックグラウンドで維持される
そのため、ブラウザプロセスのレベルで情報を保持したり、継続的に処理を行うために使う。
画面に表示されないので、script 要素以外は基本的に不要。
公式ヘルプ
コンテンツスクリプト Javascript ファイル Web ページの DOM を読み書きしたいとき 任意のパターンにマッチする URL を表示させた時、そのページごとに実行される。
構成要素中、唯一 Web ページの DOM にアクセスできる(読み書きOK)。そのため、ページの内容を取得したり、書き変えたりする場合は、このファイルに処理を定義し、他の構成要素との間で情報のやりとりを行う仕組みが必要になる。
公式ヘルプ
オプションページ HTML ファイル Browser Action のオプション画面を作りたいとき Extension の管理画面の「オプション」ボタンを押したときに新しいタブで表示される。
ユーザーがその Extension の設定情報を編集するために使われる。

Browser Action の例

ストーリー

ツールバーにアイコンがあって、それをクリックするとポップアップウィンドウが出てきて、Chrome を起動させてどのくらい時間が経過したかを表示させる。

必要な構成要素

  • ツールバーに表示させるアイコンの画像ファイル
  • ポップアップウィンドウの HTML ファイル
  • バックグラウンドページの HTML ファイル
  • manifest.json

アイコンの画像ファイル

Chrome で表示できるものであれば、どんなフォーマットでもいい。表示される大きさは、19×19 ピクセル。静的なファイルではなく、HTML5 の Canvas 要素として作ることもできるとのこと。

icon.png

とりあえずペイントでこんなのを適当に作成。

バックグラウンドページの HTML ファイル

このファイルの役目は、

  • Chrome が起動した時間を保持しておくこと
  • 外部からの問い合わせに対して Chrome 起動から現在までの経過時間を返すこと

の二点。次のようなコードになる。

<script>
var start = new Date();

function getChromeTime() {
	return new Date().getTime() - start.getTime();
}
</script>

ポップアップウィンドウの HTML ファイル

このファイルの役目は、

  • バックグラウンドページに問い合わせて Chrome 起動から現在までの経過時間を取得し、適当にフォーマットを整えて表示させること

の一点。次のようなコードになる。

<script>
window.onload = function() {
	var time = chrome.extension.getBackgroundPage().getChromeTime() / 1000;
	var sec = Math.floor(time % 60);
	var min = Math.floor((time / 60) % 60);
	var hour = Math.floor(time / 3600);
	var message = (hour?hour+"時間":"") + (min?min+"分":"") + sec + "秒";
	
	document.getElementById('time').innerHTML = message;
};
</script>
<div style="width:200px;">Chrome起動後の経過時間:<span id="time"></span></div>

バックグラウンドページにアクセスするため、chrome.extension.getBackgroundPage() を使っているところがポイント。

manifest.json

このファイルで、各ファイルの位置づけを定義する。

以下の内容で、Browser Action のアイコンに「icon.png」を、ポップアップウィンドウに「popup.html」を、バックグラウンドページに「background.html」を指定している。

詳しい様式は、公式ドキュメントを参照。

{
	"name":	"GetChromeTime",
	"version": "1.0",
	"browser_action": {
		"default_icon": "icon.png",
		"default_popup": "popup.html"
	},
	"background_page": "background.html"
}

インストール

作成したファイルをひとつのフォルダにまとめて、chrome://extensions を開き、デベロッパーモードの「パッケージ化されていない拡張機能を読み込みます」ボタンを押し、そのフォルダを指定する。

できた!

Chrome Extension

参考文献

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>