シンのおもちゃ箱 - API研究所

APIやアプリケーションを使ってみて、その実装手順や所要時間、実装したうえでの感想などを書いてます。

chrome extensionでページのSEOタグ情報をポップアップで表示

chrome extensionでページのSEOタグ情報をポップアップで表示

今回の目的

  • chrome extensionのContentScript, EventPage(backgroundPage), BrowserActionを用いて、現在閲覧しているhtmlの情報をポップアップで表示する

chrome extensionについて

概要
公式サイト
概念【重要】
  • 今回用いた機能の概念を書きに記す。この概念を理解するのと、それぞれの相互作用のさせ方を理解するのにかなり時間がかかった

ContentScript

  • Content Scripts - Google Chrome
  • 見ているページがロードされたときに、一緒に読み込ませるjs, cssを指定できる
  • ページの中に無理やり読み込ませるので、jqueryのバージョン違いや、bootstrapなどを読み込ませるといろんな定義が上書きされて、そのページのjsが動かなくなったり、デザインが崩れたりする。
  • MVCモデルでいうと、Modelに該当するもの(今回の場合は)

EventPage

  • Event Pages - Google Chrome
  • ちょっと前はBackgroundPageが主流だったが、その低コスト版。extensionの核となるもの。公式ページのBackgroundPage欄にも「EventPage 使ったら?」って書いてある
  • ContentScriptからBrowserActionの挙動は変更できないし、BrowserActionから、見ているページのDOMにアクセスできないので、それを仲介する存在。
  • イベントを発生させたり、拾ったりするのは、基本的にここで行う。
  • ContentScriptとのやりとりはsendMessageを用いて行う Message Passing - Google Chrome
  • BrowserActionのpopup.htmlファイルとのやりとりは、LocalStorage(or WebStrage)を用いて行う
  • MVCモデルでいうと、Controllerに該当するもの(今回の場合は)

BrowserAction

  • chrome.browserAction - Google Chrome
  • ブラウザのアドレスバー横に表示されるアイコン
  • popup用htmlファイルが設定されていれば、アイコンをクリックしたときに、ポップアップが出る
  • MVCモデルでいうと、Viewに該当するもの(今回の場合は)

注意事項

  • EventPageとpopup用htmlファイルの間をsendMessageでやり取りすることはできない
  • BrowserActionがクリックされたときにおこるchrome.browserAction.onClickedイベントは、既にpopupファイルが存在する場合は発生しない(つまり、クリックするたびにイベントを発生させたい場合は、ポップアップ表示の度に、popupファイルの設定を初期化する必要がある)
  • 今まで開発をしたことがある人は、最近いろいろ変わったので注意が必要(ネットに落ちてる情報も間違ってることがある)
    • popup用htmlなどでscriptタグは使えなくなった(外部ファイル化する必要がある)
    • ポップアップを指定するときのオブジェクトのキーがpopup => default_popupに変わった
    • sendRequestはsendMessageに変わった

作業 (12h)

  1. ContentScriptを用いてDOM情報を抜き出して表示する(2h) => bootstrapも読み込ませたら、デザインがくずれたので、違う方法が必要に
  2. いろいろ調べて、EventPageとBrowserActionを使えばよいことを知る(3h)
  3. ドキュメントを読む(2h)
  4. 色々試す(3h) => ContentScript <=> EventPage, EventPage <=> BrowserActionのやり取りの方法に躓く
  5. 実装(2h) => できるだけrailsっぽくしてみた

成果物

  1. サイドバーのDownload Zipをクリック
  2. ダウンロードしたファイルを展開
  3. Chromeを起動して、右上のメニューから、設定画面を開く
  4. サイドバーから拡張機能を選択
  5. デベロッパーモードにチェックを入れ、「パッケージ化されていない拡張機能を取り込むをクリック」
  6. 先ほど展開したファイル(フォルダ)を指定

結果・感想

  • chrome extensionで見ているページのSEOタグ情報をポップアップで表示することができた
  • 概念がわかりづらかった
  • 特に、ContentScript <=> BrowserActionは直接やり取りできず、EventPageをはさまなくていはいけない点、ContentScript <=> EventPage, EventPage <=> BrowserActionのやり取り方法が異なる点を理解するのが面倒だった。
  • 基本的に日本語サイトから得る情報は古かったり、popup表示するだけなど初歩的すぎで、あまり役には立たなかった。