Greasy Fork

Greasy Fork is available in English.

更好的蔡徐坤

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

< 脚本 更好的蔡徐坤 的反馈

评价:好评 - 脚本运行良好

§
发布于:2024-09-08

这位同学,还有优化的地步,用数学就能够想到,使用下面这个函数可以支持动态加载的页面:

/*--- waitForKeyElements(): 一个实用函数,用于 Greasemonkey 脚本,
它可以检测和处理AJAX加载的内容。
此外,此函数还支持在使用 `shadowRoot` 的页面上运行。
使用示例:
    base.waitForKeyElements (
        "div.comments"
        , commentCallbackFunction
    );
    // 页面特定的函数,用于在找到节点时执行我们想要的操作。
    function commentCallbackFunction (jNode) {
        jNode.text ("waitForKeyElements() 更改了这段评论。");
    }
重要提示:这个函数需要你的脚本加载了jQuery。
*/
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;
}

发布留言

登录以发布留言。