2019年10月24日木曜日

Chrome のプラグインを作る! その1 拡張機能のテンプレを作る

こんばんは!
天気が悪いとテンションもモチベーションも下がります。
ブログの更新頻度も落ちそうですが、本ブログは毎週投稿を目標としています。

ブログを一週間更新していないと叱ってくれるプラグインがあればいい。
そんな思いから、Chrome ブラウザのプラグイン制作、始めました。

ポイント

  • JavaScript をブラウザの起動ページにフックする
  • JavaScript におけるコンソール、アラート
  • JavaScript における時刻の取得

開発・実行環境

下記の環境でコードを実行し、動作を確かめた。

ブラウザ Google Chrome
バージョン: 77.0.3865.120(Official Build) (64 ビット)

PC
プロセッサ: Intel(R) Core(TM) i5-5200U CPU @2.20GHz
メモリ: 8.00 GB
OS: Windows 8.1 (64bit)

コード

とりあえず、こちらの記事[1]を参考にさせていただき、手っ取り早く環境を整えた。
アイコンはここには載せないが、適当なものを用意した。

JavaScript によるプラグインのひな型

  1. window.onload = function() {
  2. // Who am I.
  3. console.log('Chrome Plugin Test');
  4.  
  5. // Get current time and display it to console.
  6. var time = new Date();
  7. const options = {
  8. year: 'numeric',
  9. month: 'narrow',
  10. day: 'numeric',
  11. hour: 'numeric',
  12. minute: 'numeric',
  13. second: 'numeric',
  14. timeZoneName: 'short'
  15. };
  16. const timeFromat = new Intl.DateTimeFormat('ja-JP', options);
  17. console.log(timeFromat.format(time));
  18. alert(timeFromat.format(time));
  19.  
  20. // Get time object members.
  21. var year = time.getYear() + 1900;
  22. var month = time.getMonth() + 1;
  23. var date = time.getDate();
  24. var weekDay = time.getDay();
  25. var hour = time.getHours();
  26. var min = time.getMinutes();
  27. var sec = time.getSeconds();
  28. console.log(year);
  29. console.log(month);
  30. console.log(date);
  31. console.log(weekDay);
  32. console.log(hour);
  33. console.log(min);
  34. console.log(sec);
  35. }
とりあえず以下のことを同時にやった
①プラグインから呼び出される JavaScript の関数を実装
後述のマニフェストでこのファイルを指定しておく。

②コンソールにログを出力
コンソール出力には console.log を呼ぶ。
先に F12 キーを押してデバッグ画面を出しておく。

③ローケル時刻の取得
Intl.DateTimeFormat について。
Intl は国際化 API の名前空間という。
ローケルに依存した処理がここにまとまっているらしい[2]。
Intl.DateTimeFormat はローケル時刻のフォーマットを扱うクラスのコンストラクタである。
コンストラクタの引数は、ローケルの指定と、オプションが多数。
表示形式はオプションを追加することで変更できる[3]。
注意点として、year は 1900 年オリジン、month は 0 オリジンである。

(C 言語といった手続き型言語ではフォーマットを引数とした関数を呼び出すところだが、JavaScript はオブジェクト指向だけあって、フォーマットをオブジェクトにしてしまったということなのだろうか)

④アラートの表示
alert を呼べばOK

マニフェスト

  1. {
  2. "name": "Chrome plugin test",
  3. "description" : "Base Level Extension",
  4. "manifest_version": 2,
  5. "version": "1.0",
  6. "browser_action": {
  7. "default_icon": "icon_32.png"
  8. },
  9. "content_scripts": [
  10. {
  11. "matches": ["https://www.google.com/", "https://www.google.com/"],
  12. "js": ["content_scripts.js"]
  13. }
  14. ]
  15. }
とりあえず参考[1]に従いコピペ編集した。
www.google.com にアクセスすると、スクリプトが実行される。
ブラウザの起動ページをここに設定しておけば、ブラウザの立ち上げをフックすることに近いのではないだろうか。

実行結果


わーい、動いた!
よしよし、ちゃんとアラートが出力されたぞ。


コンソール出力もばっちりだ。
なんかエラーが出てるが、ようわからんし、とりあえず現段階では無視でいいか

まとめ

最低限、JavaScript、マニフェスト、アイコンの3ファイルを用意するだけでプラグインが作れることが分かった。

感想

ものすごく敷居が低く、1時間もかからずに実装できたと思う。
分かりやすい入門記事を書いてくださった Qiita 投稿者の方には本当に感謝です。

JavaScript を扱ったは今回が初めてだが、雰囲気分かるものだなと思った。
オブジェクト指向という点では、C++ のノリがどこまで通じるのか、だな。

付録

特になし。

参考文献

  1. 外部に公開しないミニマムなchrome拡張機能を作るのは1時間も使わずにできる
  2. Intl
  3. Intl.DateTimeFormat

0 件のコメント:

コメントを投稿

コメント表示は承認制に設定しています