JavaScript
userscript
greasemonkey

Web版TwitterでNGワードを表示しないGreasemonkey userscript

More than 1 year has passed since last update.

シン・ゴジラについてのネタバレを見たくなかったのでカッとなって作った

皆さんシン・ゴジラご覧になりましたか?ぼくはまだ観ていません。TLで面白いともっぱらの評判です。

そしてネタバレすると面白さ半減という話も聞きました。ネタバレ、されたくありませんね。

しかし良い映画は感想を言いたくなるのが人情。「ネタバレしないで!」とお願いする前に、Twitterで流れてくる情報は自分でコントロールしましょう。ということでuserscriptを書きました。

Greasemonkeyとは

Firefoxのアドオンです。

Greasemonkey :: Add-ons for Firefox

  1. 任意のサイトで
  2. 任意のJavaScriptを実行できるようにする

というAdd-onです。ぼくは今回作ったTwitterのサイトでNGワードを表示しないスクリプトの他に、下記スクリプトを導入しています。

  • Twitterの画像を原寸大で表示させるボタンを追加させるスクリプト
  • livedoor Dwango Reader(旧livedoor Reader)で最後の記事から次の記事へjキーで移動できるようにするスクリプト

Greasemonkey、便利なのでおすすめです。

Web版TwitterでNGワードを表示しないユーザースクリプト

ここからが本題です。下記の通り処理をしています。

  1. @includeでスクリプトの動作対象となるサイトを指定する(正規表現で指定可能)
  2. @requireでjQueryを読み込み
  3. ngWordsでNGワードを指定(配列で複数指定可能)
  4. HTML内のtweet-textクラスを総当りしてNGワードがヒットしたら削除する

すごく重いです。はやくシン・ゴジラ見てこのスクリプトをオフにしたいと思います。

TwitterFilter.user.js
// ==UserScript==
// @name        TweetFilter
// @namespace   http://www.designsatellites.jp/
// @description 指定したNGワードを含むツイートを非表示にします
// @version     1
// @grant       none
// @include https://twitter.com/*
// @require https://code.jquery.com/jquery-3.1.0.min.js
// ==/UserScript==

(function () {
    var ngWords = [
        'godzilla',
        'ゴジラ',
        'シンゴジ'
    ];

    function removeTweet() {
        var tweet = $('.stream-item:has(\'.tweet-text\')');
        if (tweet.length > 0) {
            tweet.each(function (index, element) {
                var text = $(element).find('.tweet-text').text();
                $.each(ngWords, function (index, word) {
                    if (text.includes(word)) {
                        element.remove();
                        return true;
                    }
                });
            });
        }
    }

    removeTweet();

    $(document).bind('DOMNodeInserted', function (e) {
        var element = e.target;
        if (element.nodeName == 'LI') {
            removeTweet();
        }
    });
})();