Greasy Fork is available in English.

Pixiv Origin Image

Pixiv原图显示

// ==UserScript==
// @name         Pixiv Origin Image
// @name:zh-cn   Pixiv 原图显示
// @namespace    http://tampermonkey.net/
// @version      0.3
// @description  Pixiv原图显示
// @author       Faper
// @license      MIT
// @match        http*://www.pixiv.net/*
// @connect      i.pximg.net
// @connect      i-f.pximg.net
// @connect      i-cf.pximg.net
// @icon         http://www.pixiv.net/favicon.ico
// @grant        none
// @run-at       document-end
// ==/UserScript==

"use strict";
(function() {
    const throttle = (fn, delay = 500) => {
        let flag = true;
        return (...args) => {
            if (!flag) return;
            flag = false;
            setTimeout(() => {
                fn.apply(this, args);
                flag = true;
            }, delay);
        };
    };
    //替换原图
    const originCallback = () => {
        let imgTags = document.querySelectorAll("a img");
        for(let imgTag of imgTags) {
            const originImg = imgTag.parentElement.href;
            if(/https:\/\/i.pximg.net\/img-original\/img\/[\w|\/]+\.(?:jpg|png)/g.test(originImg)) {
                imgTag.setAttribute("src", originImg);
            }
        }
    }
    //描述图片尺寸
    let sizeFig = [];
    const sizeCallback = () => {
        let imgTags = document.querySelectorAll("figure a img");
        for(let imgTag of imgTags) {
            if(sizeFig.find(x => x == imgTag) != undefined) {
                continue;
            }
            const height = imgTag.attributes.height.value;
            const width = imgTag.attributes.width.value;
            const span = document.createElement("span");
            const textNode = document.createTextNode(`${width}\u00D7${height}`);
            span.appendChild(textNode);
            imgTag.parentNode.parentNode.insertBefore(span, imgTag.parentNode);
            sizeFig.push(imgTag);
        }
    }
    const targetNode = document.querySelector("body");
    const config = {
        childList: true,
        subtree: true,
    }
    const originObserver = new MutationObserver(throttle(originCallback));
    const sizeObserver = new MutationObserver(throttle(sizeCallback));
    originObserver.observe(targetNode, config);
    sizeObserver.observe(targetNode, config);
})();