阻止天雪加载异常图片

阻止加载包含特定关键词的图片

// ==UserScript==
// @name         阻止天雪加载异常图片
// @namespace    http://tampermonkey.net/
// @version      0.5.0
// @description  阻止加载包含特定关键词的图片
// @author       tdh
// @match        https://*.skyeysnow.com/*
// @match        https://*.skyey2.com/*
// @grant        none
// @sandbox      raw
// @run-at       document-start
// @license MIT
// ==/UserScript==


(function() {
    'use strict';

    const allowAvatar = true;
    const doURLCheck = false;
    const blockedKeywords = ['download.php', 'php', 'wzdc.tk','wzdc.cc','?id='];

    function checkRedirect(url) {
        return new Promise((resolve, reject) => {
            const xhr = new XMLHttpRequest();
            xhr.open("HEAD", url, true);
            xhr.onreadystatechange = () => {
                if (xhr.readyState === 4) {
                    if (xhr.status === 301 || xhr.status === 302) {
                        resolve(true); // 是跳转链接
                    } else {
                        resolve(false); // 不是跳转链接

                    }
                }
            };
            xhr.onerror = () => {
                reject(new Error("请求失败"));
            };
            xhr.send();
        });
    }

    function checkUrl(urlToCheck,callback) {
        checkRedirect(urlToCheck)
            .then((isRedirect) => {
                if (isRedirect) {
                    console.log("链接跳转屏蔽")
                } else {
                    callback()
                }
            })
            .catch((error) => {
                console.error(`发生错误: ${error.message}`);
            });
    }

    const observer = new MutationObserver(mutations => {
        mutations.forEach(mutation => {
            mutation.addedNodes.forEach(node => {
                if (node.tagName === 'IMG') {
                    const img = node;
                    const rawImg = img.src;
                    const rawAlt = img.alt;
                    const loadRawImg = function () {
                        img.src = rawImg;
                        img.alt = rawAlt;
                    };
                    for (const keyword of blockedKeywords) {
                        if(allowAvatar && (img.src.startsWith('https://skyeysnow.com/uc_server/avatar.php') || img.src.startsWith('https://www.skyey2.com/uc_server/avatar.php'))){
                            break;
                        }
                        if (img.src.startsWith("http://bbs.skyeysnow.com/mybar.php")) {
                            break;
                        } // https://skyeysnow.com/forum.php?mod=viewthread&tid=47083
                        if(img.src.startsWith('https://skyeysnow.com/mybar.php?type=puzzle') || img.src.startsWith('https://www.skyey2.com/mybar.php?type=puzzle')){
                            break;
                        }
                        if (img.src.includes(keyword)) {
                            console.log("已屏蔽图片:" + img.src)
                            img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
                            img.alt = 'Blocked Image';
                            break;
                        }
                    }
                    if (doURLCheck){
                        if(img.src === rawImg){
                            checkUrl(img.src, loadRawImg)
                            img.src = 'data:image/gif;base64,R0lGODlhAQABAIAAAP///////yH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==';
                            img.alt = 'Blocked Image';
                        }
                    }


                }
            });
        });
    });
    observer.observe(document, { childList: true, subtree: true, attributes: true, attributeFilter: ['src'] });
})();