LoginSignup
6
7

[Chrome拡張] ストレージ(chrome.storage.local)を利用する方法

Last updated at Posted at 2023-07-02

拡張機能内で値を保持したい場合、Chrome拡張ではchrome.storageが利用できます。
今回は、そのchrome.storageを利用する方法をご紹介します。

なお、chrome.storageに保存できる最大容量は、約5Mbyteまでになります。
このサイズを超える場合は、
manifest.jsのpermissionsに「unlimitedStorage」を追加してください。

新しく作成したchrome拡張を公開しました。
そこで使用した技術を備忘録として共有できればと思い、記事を書いています。
こちらがそのChrome拡張の記事です。ご興味があれば

こちらは別のChrome拡張の記事です。合わせてどうぞ

用意するファイル

root/
  ├ manifest.json
  ├ popup.html
  ├ js/
  │  ├ popup.js
  │  └ jquery-3.5.1.min.js
  └ img/
     ├ icon32.png
     └ icon48.png

popup.html

ポップアップメニューのソースです。
p#titleに保存したタブのタイトルを表示します。
button#btn(「ストレージクリア」ボタン)を押すと保存していたタイトルを消します。

<!DOCTYPE HTML>
<html lang="ja">
  <head>
    <meta charset="utf-8" />
    <script src="js/jquery-3.5.1.min.js"></script>
    <script src="js/popup.js"></script>
  </head>
  <body>
    <p id="title" style="min-width: 520px;"></p>
    <button id="btn" type="button" style="margin-top:10px;">ストレージクリア</button>
  </body>
</html>
<!DOCTYPE HTML>

popup.js

popup.htmlを開いたときと、
button#btnを押したときに実行する処理を記述します。
1.chrome.tabs.query
 現在のウィンドウ(currentWindow:true)で表示中のタブ(active:true)を取得します。
 ここではタブのタイトル名を取得しています。
2.chrome.storage.local.get
 ストレージから保存しているタイトル名を取得します。
 指定している"title"は、コールバックで返されるvalueのキー値になります。
 もし、複数取得したい場合は、配列で["title","other",..]と指定します。
3.chrome.storage.local.set
 ストレージにタイトル名を保存します。
 タイトル名が保存されていなかった場合は、現在のタブタイトル名を
 タイトル名が保存済みの場合は、取得したタイトル名に現在のタブタイトル名を付け足しています。

$(function(){
  chrome.tabs.query({ active: true, currentWindow: true },function(tab){
    //ストレージから保存されているデータを取得
    chrome.storage.local.get("title", function(value) {
      var title = (value.title ? value.title+"<br>" : "")+tab[0].title;
      //ストレージにデータを保存
      chrome.storage.local.set({"title": title},function(){
        $("#title").html(title);
      });
    });
  });
  $(document).on("click","#btn",function(){
    $("#title").html("");
    //ストレージをクリア
    chrome.storage.local.clear();
  });
});

manifest.json

permissions
 storage:ストレージを使用するための権限
     5Mbyteを超えるサイズを取り扱いたい場合、
    「unlimitedStorage」を追加してください。
 tabs:タブの情報を取得するための権限
     この権限がなくともタブの情報は取得できますが、
     ない場合は「url,pendingUrl,title,favIconUrl」は取得できません。
     url: タブのURL
     pendingUrl: タブが完全に開かれる(コミットされる)前のタブURL
     title: タブのタイトル
     favIconUrl: タブのファビコンURL
action - default_popup
 chrome拡張のアイコンをクリックした際に呼び出すHTML(popup.html)を指定します。

{
  "name": "ストレージテスト",
  "version": "1.00",
  "description": "ストレージテスト",
  "permissions": ["storage","tabs"],
  "action": {
    "default_icon": {
      "32": "images/icon32.png"
    },
    "default_popup": "popup.html"
  },
  "icons": {
    "48": "images/icon48.png"
  },
  "manifest_version": 3
}

実行結果

1.Chrome拡張のポップアップメニューを開くと。。タブのタイトル名が取れている

2.続けてタブ切替、ポップアップメニューを開くを繰り返すと。。開いたタブのタイトル名が全て取れている。

3.ウィンドウを閉じて、再びポップアップメニューを開くと。。閉じる前のタイトル名も残っている

ちなみに。。。。

プログラム以外から保存されているストレージの内容をみたい場合は
1.Chrome拡張アイコンを右クリック
2.メニューの「ポップアップ検証」をクリック

3.DevToolsが開かれるので、コンソールで下記を実行

chrome.storage.local.get("title", function (data) { console.info(data) });

おしまい。。

その他のChrome拡張の実装方法

以下はこれまでに投稿したChrome拡張の記事です。用途に応じてご覧ください。
[Chrome拡張] ツールバーのアイコンをクリックしてHTMLページを表示する方法
[Chrome拡張] Chrome拡張メニューからページを操作する方法
[Chrome拡張] Webページ(content scripts)からChrome拡張画面へメッセージを送る方法
[Chrome拡張] Chrome拡張画面でタイマー(定期実行処理)を使用する方法
[Chrome拡張] Content Scriptsでタイマー(定期実行処理)を使用する方法
[Chrome拡張] Chrome拡張メニューからWebページを操作する方法
[Chrome拡張] Chrome拡張メニューからWebページを操作する方法(jQueryを使う)
[Chrome拡張] Chrome拡張メニューとWebページでやりとりする方法
[Chrome拡張] Chrome拡張メニューとWebページでやりとりする方法(Content Scriptsを使う)
[Chrome拡張] Chrome拡張メニューから開いていないWebページの情報を取得する方法
[Chrome拡張] ポップアップメニューを表示する方法
[Chrome拡張] ポップアップメニューからWebページを操作する方法
[Chrome拡張] ポップアップメニューからWebページを操作する方法(jQueryを使う)
[Chrome拡張] ポップアップメニューからWebページを操作する方法(スタイル変更)
[Chrome拡張] ストレージ(chrome.storage.local)を利用する方法
[Chrome拡張] オプションページを表示する方法

6
7
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
6
7