tacamy--blog

JavaScriptを勉強中の人のブログです。

Chrome拡張機能から特定のドメインのcookieの値を取得する

Chrome拡張機能のバックグラウンドスクリプトから特定のサイトのcookieの値を取得したくて、その方法について調べた。

developer.chrome.com

といっても、👆の公式ドキュメント書かれてるとおり、 chrome.cookies っていうAPIChromeに用意されているので、それを使うだけなんだけど。

まず、マニフェストパーミッションcookie利用の旨と、取得対象のホストを指定する必要がある。でも、ドキュメントの例を参考にしてそのまま書くと Permission '*://*sample.com' is unknown or URL pattern is malformed. というエラーになってしまうので注意が必要。

{
    "name": "My extension",
    ...
    "permissions": [
      "cookies",
      "*://*.sample.com"
    ],
    ...
}

正しくは、以下のように、ドメインの後ろにスラッシュが必要だった。

{
    "name": "My extension",
    ...
    "permissions": [
      "cookies",
      "*://*.sample.com/"
    ],
    ...
}

マニフェストを指定したら、あとはバックグラウンドスクリプトchrome.cookies.get() の第一引数にパラメータ、第二引数にコールバック関数を指定して実行するだけ。

function getUserID() {
  return new Promise((resolve, reject) => {
    chrome.cookies.get(
      {
        url: 'https://www.sample.com/',
        name: 'USERID',
      },
      cookie => {
        return cookie ? resolve(cookie.value) : reject(new Error('no cookie'));
      }
    );
  });
}

値をPromiseで返すようにしとけば、この関数を使う先で、cookieの値を取得したあとに何かしらの処理をするってするとき楽かなと思って👆みたいに書いた。

Chrome拡張、いろいろできておもしろい。