「Greasemonkey」カテゴリーアーカイブ

Googleの検索結果にサムネイルを追加していくユーザースクリプト Part2

google_thumbnail_2

open.thumbshots.org のサムネイルを追加するやつ が使えなくなったりしたので修正したものです。
色々調べてたら似たようなAdd-onsあります。むしろそっちをおすすめします。

動作確認
スクリプトの適当な説明
  • 検索結果の左側に112×82ぐらいの画像を表示
  • AutoPagerizeの2ページ目以降もどんどんサムネ追加
  • Amazonの場合はサムネじゃなくって商品画像を読み込む(一部画像でない)
  • Youtubeの場合は動画サムネを読み込む(一部画像でないかも)
  • ニコニコ動画の場合も動画サムネを読み込む(一部でない) 読み込まなくした
  • Chromeでも一応動く(要Tampermonkey)
  • Safariでも一応動くかもしれない(要NinjaKit)
  • もしかしたらBing検索でも表示される

ダウンロード: google_search_thumbnail.user.js

NinjaKitで管理する場合は Scripts→Add new script→スクリプト貼り付け→Saveで保存 (間違ってるかもしれません)

最近の修正内容とか

右クリック禁止(oncontextmenu)や貼り付け無効(onpaste)を無効にする

油断してるとたまに出てくる「右クリック禁止です」みたいな頭の悪いサイトで禁止された動作を使えるようにします。
oncontextmenu=”return false;” や onpaste=”return false;” のアレです。

以下、貼り付け禁止を無効にするやつです。

なんかいろいろ禁止されてるクソサイトの場合は paste, contextmenu, drop あたり書いとけばいいと思います。

document.addEventListener('paste', event => event.stopImmediatePropagation(), true);
document.addEventListener('contextmenu', event => event.stopImmediatePropagation(), true);
document.addEventListener('drop', event => event.stopImmediatePropagation(), true);

指定したサイトでだけこのスクリプトを有効にしないと右クリックで独自のメニューを出すサイトでは、その右クリックが出なくなるので注意が必要です。

Feedlyで読みたくないエントリーを非表示にするユーザースクリプト

Feedly Proに$99払ったのにあまりプロ感がなくどのあたりが有料なのか分からなくなってきたけど、メインのRSSリーダーとして使ってることに変わりはないので中途半端に作ったやつを修正しました。

例のごとく userscripts.org にありそうだけど自分で作ると修正するとき楽なのでということです。

動作確認

ダウンロード: feedly_filter.user.js

「井上喜久子17才です」っつってんだろ! 17sai.user.js

17sai

声優業界の基礎知識ともいえる井上喜久子さんの年齢がGoogle検索で間違って表示されてしまうのを自動で修正します。
他数名の年齢も同様に修正します。

いや、ノリで作ったジョークスクリプトなので細かく検証してませんよ。
元ネタは “hirataya / 17sai.user.js” です。
動かなかったので今のGoogleに対応させてたら他にも年齢間違って表示されてる箇所があったのでベタ書きで追加してってます。
たぶん、間違いなくGoogle検索が重くなります。要注意です。

※「17歳」ではなく「17才」と表記するのが正しいようなので修正しました。

ダウンロード: 17sai.user.js

Feedly Pro ($99) に申し込んだことだしゴミみたいなユーザースクリプトを作った

\Pro Plan/
feedly_pro

つい最近、Feedlyが月額$5の有料プランを先着5000人だったかで$99払えば生涯使えるというのをやってたので申し込んだのだけど、このプレミアム感のなさに驚愕してゴミみたいなユーザースクリプトを作った。

userscripts.org に絶対ありそうな広告エントリーやら必要なさそうなのを非表示にするやつの簡易版。

好んで使ってたDOMNodeInsertedが廃止予定らしく、MutationObserverというのを使ってるので古いブラウザだと全く動かないしエラーでます。
正直、MutationObserverが使いたかっただけ。

ダウンロード: feedly_filter.user.js

// ==UserScript==
// @name           Feedly Filter
// @description    広告エントリーを非表示にするしか能がない
// @include        http://cloud.feedly.com/*
// @include        https://cloud.feedly.com/*
// ==/UserScript==

(function() {
    var feedly = {
        titles: [
            /^(PR:|AD:|INFO:|【PR】)/i,
            /管理人のブックマーク/,
            /^ダイジェストニュース/,
            /bokete/
        ],
        urls: [
        ],
        observer: new MutationObserver(function(mutations) {
            mutations.forEach(function(mutation) {
                var elm = mutation.addedNodes[0];
                if (elm && elm.nodeName == 'DIV') {
                    feedly.filterEntry(elm);
              }
            });
        }),
        init: function() {
            // this.debug(' init()');
            this.observer.observe(document.body, {childList: true, subtree: true});
            window.addEventListener('beforeunload', this, true);
        },
        handleEvent: function(event) {
            if (event.type == 'beforeunload') {
                // this.debug(' disconnect()');
                this.observer.disconnect();
                window.removeEventListener('beforeunload', this, true);
            }
        },
        debug: function() {
            var i, l = arguments[0];
            for (i = 1; i < arguments.length; i++) {
                if (arguments[i]) l += ', ' + arguments[i];
            }
            unsafeWindow.console.log('[userscript][feedly_filter]' + l);
        },
        filterEntry: function(elm) {
            var a, i, title, read = false;
            if (!elm.className || !elm.className.contains('u0Entry')) return;
            a = elm.getElementsByClassName('title')[0];
            if (a.className == 'title read') {
                read = true;
            }
            title = elm.getAttribute('data-title');
            for (i = 0; i < this.titles.length; i++) {
                if (!this.titles[i].test(title)) continue;
                // this.debug('[hide] ' + title);
                this.hide(elm, read);
                break;
            }
        },
        hide: function(elm, read) {
            var div = elm.getElementsByClassName('condensedTools')[0],
                img, e;

            if (read) {
                elm.style.display = 'none';
                return;
            }
            if (!div) return;
            img = div.getElementsByTagName('img')[1];
            if (img.getAttribute('title') == 'Mark as read and hide') {
                e = document.createEvent('MouseEvents');
                e.initMouseEvent('click', true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
                img.dispatchEvent(e);
            }
        }
    };
    feedly.init();
})();