Chrome拡張を作りましょう!

  • 14
    いいね
  • 0
    コメント

Chrome拡張の入門として、Chatworkで使える拡張を作りました!
下記のstepsに従ったら、自分でも作れるよ!

Manifestを書きましょう

Chrome拡張を書こうとおもったら、まずはManifestです。このJsonファイルがないと、どんだけコードを書いても、Chrome拡張としてリリースできない。

まず、上の部分:

{
  "manifest_version": 2,

  "name": "ChatWork_TO_@Shortcut",
  "description": "チャットワークメッセージで「@@」を入力するとキーボードでTOを選択できる",
  "version": "1.0.1",

ここで、拡張の名前、内容とバージョンを設定する。
Chromeで使うmanifestバージョン「1」
が対応されていないため、
manifest_versionも2に設定しないといけないらしいです。

次に、browserが起動すると、拡張の行動を書く。今回は簡単なので、iconだけを設定します。iconファイルは現在のフォルダーに保存されている。

  "browser_action": {
    "default_icon": "icon.png"
  }, 

その下に、content_scriptsを追加します。ここで、どんなurlに有効すると何のスクリプトを読み込むのを設定する。自分はchatworkの全てのチャットで使うので、「*」を書きました。
Javascriptも使うので、2つファイルを読み込みました。

  "content_scripts": [
    {
      "matches": ["https://kcw.kddi.ne.jp/*"],
      "js": ["jquery-3.1.1.js","ChatworkAtMarkTo.js"]
    }
  ],

最後に、permissionsを追加します。この部分はChromeから拡張になんの情報を渡すかを設定する。

  "permissions":[
    "tabs"
  ]

全体的にmanifest.jsonは下記のようになります。

{
  "manifest_version": 2,

  "name": "ChatWork_TO_@Shortcut",
  "description": "チャットワークメッセージで「@@」を入力するとキーボードでTOを選択できる",
  "version": "1.0.1",

  "browser_action": {
    "default_icon": "icon.png"
  }, 

  "content_scripts": [
    {
      "matches": ["https://kcw.kddi.ne.jp/*"],
      "js": ["jquery-3.1.1.js","ChatworkAtMarkTo.js"]
    }
  ],

  "permissions":[
    "tabs"
  ]
}

これを自分の拡張フォルダに保存して、次Javascriptに行きます。

Javascriptを書きましょう

本拡張はJavascriptのJqueryを使うので、manifestにjqueryファイルもインポートしている。
コードは下記のように。

jQuery(function () {
  //@@が削除されたかのflag
  var replacedAtMarks = false;
  //メッセージ内容boxにキーを打った(keyup)後で実行されます
  $("#_chatText").keyup(function (){
    //チャット入力textareaの内容を取得
    var text = $(this).val();
    //'@@'を探す正規表現
    var regExpAtMark = new RegExp('@{2}'); 

    //内容にどこかで「@@」が入力されたを判断する
    if(regExpAtMark.test(text)){
      //TOボタンをクリック。メンバーの選択はキーボードでもできる。
      $('#_to').trigger('click');
      //「@@」の分だけを削除する
      $(this).val(text.replace(regExpAtMark,''));
      //@@を削除したよ!
      replacedAtMarks = true;
    }
  });

  //@@を押すと、TOのリストが出てくるけど、その後ESCキーを押したら、
  //メッセージ入力画面のfocusが外れる。それを避けるため、下記のfunction
  $(document).keyup(function (e){
    //@@が削除されていた後にESCキーを押すと
    if(e.which == 27 && replacedAtMarks){
      //メッセージ入力画面にfocusを戻す
      $("#_chatText").focus();
      //flag reset
      replacedAtMarks = false;
    }
  });
});

簡単に言うと、Chatworkの入力画面でメッセジを入力した後、正規表現で文字列に「@@」があるかを判断して、TO画面をJqueryでクリックする。その後、「@@」を削除する。

Chromeで使いましょう!

この2つファイルと自分で精製したicon.pngを1つのフォルダに入れて、Chromeブラウザを開く。

chrome://extensions/

までに移動して、'Load unpacked extension...'ボタンを押す。ここで、保存しているフォルダを指定して、そのままchrome拡張を使えるようになる!これで完成です!
(chrome webstoreで公開するのはまた別の記事で!)