Greasy Fork

Greasy Fork is available in English.

Pixiv 增强

屏蔽广告, 查看热门图片, 按收藏数搜索, 下载gif、多图, 显示画师i、画师背景图链接、自动加载评论。github:https://github.com/Ahaochan/Tampermonkey,欢迎star和fork。

当前为 2017-11-03 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        Pixiv 增强
// @namespace   https://github.com/Ahaochan/Tampermonkey
// @version     0.0.5
// @description 屏蔽广告, 查看热门图片, 按收藏数搜索, 下载gif、多图, 显示画师i、画师背景图链接、自动加载评论。github:https://github.com/Ahaochan/Tampermonkey,欢迎star和fork。
// @author      Ahaochan
// @match       https://*.pixiv.net*
// @match       https://*.pixiv.net/*
// @connect     i.pximg.net
// @grant       GM_xmlhttpRequest
// @grant       GM_setClipboard
// @require     https://code.jquery.com/jquery-2.2.4.min.js
// @require     https://cdn.bootcss.com/jszip/3.1.4/jszip.min.js
// @require     https://cdn.bootcss.com/FileSaver.js/1.3.2/FileSaver.min.js
// ==/UserScript==

(function ($) {
    'use strict';

    // 删除广告、查看热门图片
    (function () {
        // 删除广告
        $('._premium-lead-tag-search-bar').hide();
        // 查看热门图片
        $('.popular-introduction-overlay').hide();
    })();

    // 按收藏数搜索
    (function () {
        $('.navigation-menu-right').append(
            '<div class="menu-group">' +
            '    <a class="menu-item js-click-trackable-later">' +
            '           <img class="_howto-icon" src="https://source.pixiv.net/www/images/knowhow/icon/howto-brush.svg?20171004">' +
            '           <span class="label">收藏人数:</span>' +
            '           <select id="ahao_favourite_num_select">' +
            '               <option value=""></option>' +
            '               <option value="10000users入り">10000users入り</option>' +
            '               <option value="5000users入り" > 5000users入り</option>' +
            '               <option value="1000users入り" > 1000users入り</option>' +
            '               <option value="500users入り"  >  500users入り</option>' +
            '               <option value="300users入り"  >  300users入り</option>' +
            '               <option value="100users入り"  >  100users入り</option>' +
            '               <option value="50users入り"   >   50users入り</option>' +
            '           </select>' +
            '   </a>' +
            '</div>');

        // 如果已经有搜索字符串就在改变选项时直接搜索
        $('#ahao_favourite_num_select').on('change', function () {
            var $text = $('#suggest-input');
            if (!!$text.val()) {
                $('#suggest-container').submit();
            }
        });

        // 在提交搜索前处理搜索关键字
        $('#suggest-container').submit(function () {
            var $text = $('#suggest-input');
            var $favourite = $('#ahao_favourite_num_select');
            // 去除旧的搜索选项
            $text.val($text.val().replace(/\d*users入り/, ''));
            // 去除多余空格
            while ($text.val().indexOf('  ') > -1) {
                $text.val($text.val().replace('  ', ' '));
            }
            // 添加新的搜索选项
            $text.val($text.val() + ' ' + $favourite.val());
        });
    })();

    // 下载图片
    (function () {
        if (!(location.href.indexOf('member_illust.php') !== -1)) {
            return;
        }
        // 获取参数
        var param = $('.bookmark_modal_thumbnail')
            .attr('data-src')
            .match(/img-master\/img([\s\S]*?)_/)
            [1];

        // 下载动图
        (function () {
            var hasGIF = !!$('div ._ugoku-illust-player-container').length;
            if (hasGIF) {
                var url = 'https://i.pximg.net/img-zip-ugoira/img' + param + '_ugoira600x600.zip';
                // 添加下载按钮
                $('div .bookmark-container').append(
                    '<a href="' + url + '" class="_bookmark-toggle-button add-bookmark">' +
                    '   <span class="bookmark-icon"></span><span class="description">下载动图</span>' +
                    '</a>');
            }
        })();

        // 下载多图
        (function () {
            var hasMore = !!$('a.read-more').length;
            if (hasMore) {
                var downloaded = 0;                             // 下载完成数量
                var num = $('a.read-more').text().match(/\d+/); // 下载目标数量

                // 添加下载按钮
                var $a = $('<a class="_bookmark-toggle-button add-bookmark">' +
                    '   <span class="bookmark-icon"></span><span class="description">下载失败</span>' +
                    '</a>')
                    .on('click', function () {
                        if (downloaded < num) {
                            return;
                        }
                        zip.generateAsync({type: "blob", base64: true}).then(function (content) {
                            saveAs(content, "pic.zip"); // see FileSaver.js'
                        });
                    });
                $('div .bookmark-container').append($a);


                var zip = new JSZip();
                for (var i = 0; i < num; i++) {
                    (function (index) {
                        var url = 'https://i.pximg.net/img-master/img' + param + '_p' + index + '_master1200.jpg';
                        GM_xmlhttpRequest({
                            method: 'GET',
                            headers: {referer: 'https://www.pixiv.net/'},
                            overrideMimeType: 'text/plain; charset=x-user-defined',
                            url: url,
                            onload: function (xhr) {
                                var r = xhr.responseText,
                                    data = new Uint8Array(r.length),
                                    i = 0;
                                while (i < r.length) {
                                    data[i] = r.charCodeAt(i);
                                    i++;
                                }

                                var blob = new Blob([data], {type: 'image/jpeg'});

                                downloaded++;
                                zip.file('pic_' + index + '.jpg', blob, {binary: true});

                                if (downloaded == num) {
                                    $a.find('.description').text('下载多图(' + downloaded + '/' + num + ')');
                                } else {
                                    $a.find('.description').text('下载中: ' + downloaded + '/' + num);
                                }
                            }
                        });
                    })(i);
                }
            }
        })();
    })();

    // 显示画师id和背景图
    (function () {
        if (!(location.href.indexOf('member_illust.php') !== -1 ||
                location.href.indexOf('member.php') !== -1  )) {
            return;
        }
        // 用户名
        var $username = $('a.user-name');

        // 显示画师id
        var $id = $('<span>ID: ' + pixiv.context.userId + '</span>');
        $id.on('click', function () {
            var $this = $(this);
            $this.text('ID已复制到剪贴板');
            GM_setClipboard(pixiv.context.userId);
            setTimeout(function () {
                $this.text('ID: ' + pixiv.context.userId);
            }, 2000);
        });
        $username.after($id);

        // 显示画师背景图
        var url = $('body').css('background-image').replace('url(','').replace(')','').replace(/\"/gi, "");
        $username.after('<a target="_blank" href="'+url+' ">背景图</a>');
    })();

    // 自动加载评论
    (function () {
        if (!(location.href.indexOf('member_illust.php') !== -1)) {
            return;
        }

        // 1秒加载一次评论
        var once = false;
        var timer = setInterval(function () {
            var clickEvent = document.createEvent('MouseEvents');
            clickEvent.initEvent('click', true, true);

            var more = document.getElementsByClassName('_3aAuVt-')[0];
            if (!!more) {
                once = true;
                more.dispatchEvent(clickEvent);
            } else if(once){
                clearInterval(timer);
            }
        }, 1000);
    })();
})(jQuery);