LoginSignup
0
1

More than 5 years have passed since last update.

2ch.sc 公式 p2 の動作を Chrome 拡張で改造する (3)

Last updated at Posted at 2017-05-04

概要

  • p2 で不要なスレをスレ一覧から非表示にする機能を実装します。

前回

スレッド一覧の改造

前回、ゴミ箱ボタンの押下時の動作を追加しました。ただ、押下した情報を保存していないので、ページのリロードするとまだ全てのスレが表示されてしまいました。

今回、押下したスレの情報を Chrome 拡張で扱えるストレージに保存し、ページロード時に読み込みたいと思います。

Chrome 拡張でのストレージについて

以下のページを参考にさせて頂きました。

ざっくりとは key/value で保存し、処理方法としては local/sync があるとのことです。

storage パーミッションの追加

manifest.json を編集して、permissions 配列に "storage" を追加します。

  ...

  "permissions": [
    "tabs",
    "http://*/*",
    "https://*/*",
    "storage"
  ],

  ...

スレッド非表示ボタンクリック時のスレ情報の保存

storage というハッシュを用意し、key にスレッドID、value にスレのタイトルを設定したいと思います。

      $('#' + threadId).click(function() {
        storage[threadId] = title;

        chrome.storage.local.set(storage, function() {
          var tr = $(this).parent().parent(); // span > td > tr
          tr.hide();
        });
      });

ページロード時のストレージの読み込み・スレ非表示

ページロード時にストレージを読み込み、key としてスレッドID が含まれていれば、そのスレは非表示にします。以下のようなイメージ。

  chrome.storage.local.get(function(storage) {
    ...

    if (threadId in storage) {
      tr.hide();
    }

    ...
  });

最終的なコード

上記の点以外にも、tr の値の持ち方などを多少変更しています。

'use strict';

$(function() {
  chrome.storage.local.get(function(storage) {
    $('tr:not(.tableheader)').each(function() {
      var tr    = $(this);
      var url   = tr.find('.tl>a:last, .tl2>a:last').attr('href');
      var title = tr.find('.tl>a:last, .tl2>a:last').text();

      if (typeof url !== 'undefined') {
        var result   = url.match(/&key=([^&]+)&/);
        var threadId = result[1];

        // ゴミ箱の表示追加
        tr.append('<td class="t"><span id=\'' + threadId + '\'>🗑</span></td>');

        if (threadId in storage) {
          tr.hide();

        } else {
          // ゴミ箱クリック時ハンドラ
          $('#' + threadId).click(function() {
            storage[threadId] = title;
            chrome.storage.local.set(storage, function() {
              tr.hide();
            });
          });
        }
      }
    });
  });
});

まとめ

ということで、今回までの Chrome 拡張の実装で、以下を行いました。

  • スレッド非表示ボタンの表示
  • ボタン押下でその行のスレを非表示
  • ボタン押下したスレ情報をストレージに保存
  • ページロード時にストレージを読み込み、すでに非表示ボタンが押されているスレは非表示

今後、さらに Chrome 拡張の勉強として実装を追加するなら、設定ページから非表示済みスレを解除できるように、等が考えられますが、多分やらない。

これで読みたいスレを探すのがかなり快適になるはず。

0
1
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
0
1