Greasy Fork

Bilibili 哔哩哔哩动态查看原图

使哔哩哔哩动态可以查看原图以保存图片等,同时也支持空间中的动态

当前为 2019-01-08 提交的版本,查看 最新版本

// ==UserScript==
// @name         Bilibili 哔哩哔哩动态查看原图
// @icon         https://t.bilibili.com/favicon.ico
// @namespace    https://lolico.moe/
// @version      1.0
// @description  使哔哩哔哩动态可以查看原图以保存图片等,同时也支持空间中的动态
// @author       Jindai Kirin
// @match        https://t.bilibili.com/
// @match        https://space.bilibili.com/*/dynamic
// @license      GPL-3.0
// @grant        none
// @run-at       document-end
// @require      https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js
// ==/UserScript==

(function() {
    'use strict';

    var datav={
        t: '0a8e5084',
        space: '2dd69243'
    };
    var domain = window.location.href.match(/(?<=\/\/)[^.]+/)[0];
    var origBtnHtml = `<li class="bp-v-middle orig-btn" data-v-${datav[domain]}><i data-v-${datav[domain]} class="bp-icon-font icon-ss-dynamic bp-v-middle"></i><span data-v-${datav[domain]}>查看原图</span></li>`;

    //添加按钮
    function setOrigBtn() {
        $('.imagesbox').each(function (i, ele) {
            var $ele=$(ele);
            //完成标志
            if ($ele.hasClass('orig-done')) return;
            else $ele.addClass('orig-done');
            //点击监听事件
            $ele.click(function () {
                if(!$ele.hasClass('orig-active')) {
                    //添加按钮
                    (function addBtn(){
                        var $bc = $ele.find('.boost-control');
                        //等待DOM完成渲染
                        if($bc.length === 0) {
                            setTimeout(addBtn, 50);
                            return;
                        }
                        $ele.addClass('orig-active');
                        if ($bc.find('.orig-btn').length === 0) {
                            $($bc.children()[1]).after(origBtnHtml);
                            $bc.find('.orig-btn').click(function () {
                                window.open($ele.find('.boost-img>img').attr('src').replace(/@.*/, ''));
                            });
                        }
                    })();
                } else if($('.boost-img:hover').length>0 || $('.boost-control > .bp-v-middle:first').is(':hover')){
                    //移除按钮
                    $ele.find('.orig-btn').remove();
                    $ele.removeClass('orig-active');
                }
            });
        });
    }

    var running = false;

    function run() {
        if (running) return;
        running = true;
        (function waitReady(){
            if($('.imagesbox').length === 0) {
                setTimeout(waitReady, 100);
                return;
            }
            setOrigBtn();
            setTimeout(function () {
                running = false;
            }, 2000);
        })();
    }

    //等待DOM完成渲染
    setTimeout(run, 500);
    window.onscroll = run;
})();