Chrome拡張機能 開発の第一歩

概要

半年ほど前だがChormeの簡単な拡張機能を作ったので、その備忘録を残す。

拡張機能の実体はzipファイル。zipファイルの中には、manifest.jsonという名前のjsonファイルが含まれている必要がある。

以下で簡単な実装例を2つ見ていく。

実装例1 - スタイルを変化させる

特定ページの特定要素を消したり、見た目を変えたりする拡張機能。adblockのようなものをイメージしてもらうとわかりやすいと思う。

{
  "name": "スタイルを変化させる拡張機能",
  "version": "1.0",
  "content_scripts": [
    {
      "matches": ["https://example.*/*"],
      "css": ["style.css"],
      "js": []
    }
  ],
  "manifest_version": 2
}

細かいオプションはもっとあるが、とりあえずこれだけあれば動く。
nameには拡張機能の名前をつける。拡張機能管理画面で表示される他、アイコンの設定をしていなければここで指定した名前の1文字目が拡張機能のアイコンに使われる。
versionにはこの拡張機能のバージョンをつける。同じ拡張機能を更新していく場合に数字を上げていく。
content_scriptsには読み込むcssファイルやjsファイルを指定する。matchesで指定したパターンにURLが一致した場合に、cssjsで指定したファイルが読み込まれる。配列なのでそれぞれ複数指定できる。
manifest_versionには2を指定する。現在有効なmanifest_versionは2しかないらしい。

#target-element {
  display: none;
}

id="target-element"の要素を表示しないようにする。style.cssの中身を変えれば、要素を非表示にするだけでなくページの見た目を自由に変えることができる。

実装例2 - jsでページを操作する

拡張機能でページにjsを埋め込む。

{
  "name": "jsでページを操作する拡張機能",
  "version": "1.0",
  "content_scripts": [
    {
      "matches": ["http://example.com/*"],
      "css": [],
      "js": ["script.js"]
    }
  ],
  "manifest_version": 2
}
window.onload = function(){
  const element = document.getElementById('target-element');
  if(element) element.setAttribute('oncopy', 'event.stopPropagation();');
};

id="target-element"の要素内でコピーしたときに、その上要素でoncopy="return false;"などと書かれていた場合コピーが阻害されるが、拡張機能でstopPropagationすることでコピーの阻害を無効化することができる。

導入方法

Chromeのアドレスバーにchrome://extensions/と入力して拡張機能ページへ移動。右上のデベロッパーモードを有効にする。パッケージ化されていない拡張機能を読み込むをクリック。manifest.jsonと必要なコンテンツスクリプトを含むフォルダを指定する。ブラウザ右上にアイコンが追加されたら導入成功。

matchesのURLパターンや、cssやjs内のセレクタを変えて実際のサイトで試してみてほしい。