2ch.sc 公式 p2 の動作を Chrome 拡張で改造する (3)
概要
- 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 拡張の勉強として実装を追加するなら、設定ページから非表示済みスレを解除できるように、等が考えられますが、多分やらない。
これで読みたいスレを探すのがかなり快適になるはず。
Author And Source
この問題について(2ch.sc 公式 p2 の動作を Chrome 拡張で改造する (3)), 我々は、より多くの情報をここで見つけました https://qiita.com/yousorojp/items/24486d1b11cbada68a2a著者帰属:元の著者の情報は、元のURLに含まれています。著作権は原作者に属する。
Content is automatically searched and collected through network algorithms . If there is a violation . Please contact us . We will adjust (correct author information ,or delete content ) as soon as possible .