Greasy Fork

Greasy Fork is available in English.

更好的蔡徐坤

把所有检测到的图片替换为蔡徐坤图片,并支持动态加载

当前为 2024-09-08 提交的版本,查看 最新版本

// ==UserScript==
// @name         更好的蔡徐坤
// @namespace    http://tampermonkey.net/
// @version      0.4
// @description  把所有检测到的图片替换为蔡徐坤图片,并支持动态加载
// @author       BAIYU
// @match        *://*/*
// @grant        none
// @require      https://code.jquery.com/jquery-3.6.0.min.js
// @license      MIT
// @license      GPL-3.0
// @license      Apache-2.0
// @license      BSD
// ==/UserScript==

(function() {
    'use strict';

    // 蔡徐坤的图片直链
    const caiXukunImages = [
        'https://picabstract-preview-ftn.weiyun.com/ftn_pic_abs_v3/920ac09b6e0ee714317940f0d38ca10f845f2b9aecd164d5b72d0e62f9009eac44411ed83f20ef14dae8895101511665?pictype=scale&from=30111&version=3.3.3.3&fname=Kk1.gif&size=320',
        'https://picabstract-preview-ftn.weiyun.com/ftn_pic_abs_v3/2321bf24da1477d92fe882f8ffd178d9360df085215c9d26af90870620c9256f48f0e9844eb94a1d8dfcf92a217e000f?pictype=scale&from=30111&version=3.3.3.3&fname=Kk2.png&size=320',
        'https://picabstract-preview-ftn.weiyun.com/ftn_pic_abs_v3/14c6728dcb28e48f90c5cf155ec0a5c5ee5f4b8de31e3d7fbbd82f99e36d3929964f759095cc9d3c0e97d215c5302403?pictype=scale&from=30111&version=3.3.3.3&fname=Kk.jpg&size=320'
    ];

    const enableLogging = true;

    function log(message) {
        if (enableLogging) {
            console.log(message);
        }
    }

    waitForKeyElements("img", function(jNode) {
        if (!jNode.data('replaced')) {
            const randomImage = caiXukunImages[Math.floor(Math.random() * caiXukunImages.length)];
            jNode.attr("src", randomImage);
            jNode.attr("srcset", '');
            jNode.data('replaced', true);
            log(`图片替换为:${randomImage}`);
        }
    });

    $(window).on('resize', function() {
        waitForKeyElements("img", function(jNode) {
            if (!jNode.data('replaced')) {
                const randomImage = caiXukunImages[Math.floor(Math.random() * caiXukunImages.length)];
                jNode.attr("src", randomImage);
                jNode.attr("srcset", '');
                jNode.data('replaced', true);
                log(`图片替换为:${randomImage} 在窗口调整大小时`);
            }
        });
    });

    function waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector) {
        function findInShadowRoots(root, selector) {
            let elements = $(root).find(selector).toArray();
            $(root).find('*').each(function () {
                const shadowRoot = this.shadowRoot;
                if (shadowRoot) {
                    elements = elements.concat(findInShadowRoots(shadowRoot, selector));
                }
            });
            return elements;
        }
        var targetElements;
        if (iframeSelector) {
            targetElements = $(iframeSelector).contents();
        } else {
            targetElements = $(document);
        }
        let allElements = findInShadowRoots(targetElements, selectorTxt);
        if (allElements.length > 0) {
            allElements.forEach(function (element) {
                var jThis = $(element);
                var alreadyFound = jThis.data('alreadyFound') || false;
                if (!alreadyFound) {
                    var cancelFound = actionFunction(jThis);
                    if (cancelFound) {
                        return false;
                    } else {
                        jThis.data('alreadyFound', true);
                    }
                }
            });
        }
        var controlObj = waitForKeyElements.controlObj || {};
        var controlKey = selectorTxt.replace(/[^\w]/g, "_");
        var timeControl = controlObj[controlKey];
        if (allElements.length > 0 && bWaitOnce && timeControl) {
            clearInterval(timeControl);
            delete controlObj[controlKey];
        } else {
            if (!timeControl) {
                timeControl = setInterval(function () {
                    waitForKeyElements(selectorTxt, actionFunction, bWaitOnce, iframeSelector);
                }, 50);
                controlObj[controlKey] = timeControl;
            }
        }
        waitForKeyElements.controlObj = controlObj;
    }
})();