2chResAborn.user.js : 2ch.netをWebブラウザーで読むときNGワード含むレスを見せない
2ch.netのAPI変更で2ch専用ブラウザが使えなくなった。そこで2ch.netをWebブラウザで見ているわけなんだが‥‥
すると2ch専用ブラウザにあった「あぼーん機能」が使用できない。そこで作ったよ User JavaScript。

UserJavaScriptってなんだっけ?
Webブラウザで動作するJavaScriptだ。「Firefox」と「GoogleChrome」で拡張機能を入れると使えるようになる。
使い方は https://sites.google.com/site/itouhiro/2012/webaborn に書いてあるよ。
以下のスクリプトを登録すればよい。
2chResAborn.user.js
// ==UserScript==
// @name 2chResAborn
// @version 1.0
// @namespace http://webaborn.herokuapp.com
// @description Reduce the situation you see disagreeable texts in the way replacing to some word. ('aborn' means 'purge and unable to read'.)
// @author itouhiro
// @grant none
// @match http://*.2ch.net/*
// @match http://*.2ch.sc/*
// @match http://*.open2ch.net/*
// @match http://*.bbspink.com/*
// @match http://jbbs.shitaraba.net/bbs/*
// @match http://*.machi.to/bbs/*
// ==/UserScript==
(function () {
const abornString = '****';
const ng_words = ['NGワードを追加します', "ここにNGワードを追加します"];
var timer = null;
var resAborn = function(node){
var cand = document.evaluate('.//text()[parent::dt or parent::dd]', node, null, 6, null);
var i = 0;
var j = 0;
var lenC = 0;
var lenNG = 0;
var txt = '';
var resStart = -1;
var resDelete = false;
for (i=0, lenC=cand.snapshotLength; i<lenC; i++) {
txt = cand.snapshotItem(i).nodeValue;
if (txt.match(/: ?\d{4}\/\d{2}\/\d{2}\(.\) ?\d{2}:\d{2}:\d{2}/)) {
if (resDelete && resStart>=0) {
for (j=resStart; j<i; j++) {
if (cand.snapshotItem(j).nodeValue !== '\n') cand.snapshotItem(j).nodeValue = abornString;
}
}
resStart = i;
resDelete = false;
continue;
}
if (resDelete) continue;
for (j=0, lenNG=ng_words.length; j<lenNG; j++){
if(txt.indexOf(ng_words[j]) >= 0) {
resDelete = true;
break;
}
}
}
if (resDelete && resStart>=0) {
for (j=resStart; j<i; j++) {
if (cand.snapshotItem(j).nodeValue !== '\n') cand.snapshotItem(j).nodeValue = abornString;
}
}
}
resAborn(document);
document.addEventListener('DOMSubtreeModified', function(e){ if(timer)clearTimeout(timer); timer=setTimeout(resAborn(e.target),300); }, false);
})();
2ch.netだけでなく、2ch.sc やおーぷん2ちゃんねるでも使えるのかな?
2015年3月時点で、2ch.net、2ch.sc、open2ch.net、したらば で使えることを確認した。next2ch.netでは使えないのはHTML構造が2ch.net等と異なるため。
どうやって使うのか、実際にやってみてよ。
GoogleChromeに拡張機能Tampermonkeyを入れる。
Tampermonkey - Chrome Web Store
でインストールできるぞ。
[≡ - その他のツール - 拡張機能 - Tampermonkey - オプション]をクリック。

[新規作成アイコン]をクリック。

NGワードを設定するぞ。
const ng_words=[];
の「 [ ] 」のあいだにNGワードを並べていく。
最後に保存ボタンを押そう。

ここでは
- アスキーアートの一部
- 「ココナツ」という文字列
の2つをNGワードにしたぞ。

アスキーアートを消すときは、このようにアスキーアートの一部を選択してNGワードにする。別にアスキーアートの1行全部を追加する必要はない。アスキーアートのなるべく上の行を追加したほうが動作速度は若干速くなるが、気にするほどの速度差はないかな。
NGワードの個数に制限はあるのかな?
とくにないよ。NGワードは1つでもいいし、1000個でもいい。NGワードが多くなるとWebブラウザーで2ch.net等を見るとき少し表示が重くなったりCPUファンが回ったりするかもしれないけどね。
するとこのようにNGワードを含むレスをまるごと隠せるんだ。

NGワードを隠す文字は「****」になっているけど、変更できる?
const abornString = '****';
を変更すればいいよ。「【削除】」とか全角空白「 」とかに。
NGワード自体を見たくないときはどうすればいいだろう? 今追加するNGワードを見るのはいいんだけど、過去に追加したNGワードは見たくないんだ。
http://webaborn.herokuapp.com にNGワードを入力して、得られるuser.jsファイルの中の
const ng_words = ['\u9945\u982d','\u30de\u30f3\u30b8\u30e5\u30a6'];
のような行をコピーすればいいよ。これはNGワードに「まんじゅう」「饅頭」を追加したときのNGワードなんだけど、わからなくなっているだろ。

GreasemonkeyスクリプティングTIPS&SAMPLES
- 作者:高山 恭介
- 発売日: 2006/12/15
- メディア: 単行本