B站禁用IPV6

禁用哔哩哔哩网站的IPV6

// ==UserScript==
// @name         B站禁用IPV6
// @namespace    chutung
// @version      0.4
// @description  禁用哔哩哔哩网站的IPV6
// @author       chutung
// @match        https://www.bilibili.com/*
// @match        https://www.bilibili.com/video/*
// @match        https://www.bilibili.com/medialist/play/*
// @match        https://www.bilibili.com/list/*
// @match        https://www.bilibili.com/bangumi/play/*
// @icon         https://www.bilibili.com/favicon.ico?v=1
// @license      GPL-3.0-only
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    // 禁用IPv6的主函数
    function disableIPv6() {
        // 获取所有video元素
        const videos = document.querySelectorAll('video');
        if (videos.length === 0) return;

        videos.forEach(video => {
            // 监听视频源变更
            const observer = new MutationObserver(mutations => {
                mutations.forEach(mutation => {
                    if (mutation.type === 'attributes' && mutation.attributeName === 'src') {
                        replaceIPv6Url(video);
                    }
                });
            });

            // 开始观察video元素的src属性变化
            observer.observe(video, { attributes: true, attributeFilter: ['src'] });

            // 初始检查
            replaceIPv6Url(video);
        });
    }

    // 替换IPv6地址为IPv4
    function replaceIPv6Url(videoElement) {
        if (!videoElement.src) return;

        // 匹配IPv6地址
        const ipv6Regex = /(https?:\/\/)\[[0-9a-fA-F:]+\]/;
        const match = videoElement.src.match(ipv6Regex);
        if (!match) return;

        // 替换为IPv4地址
        const newUrl = videoElement.src.replace(ipv6Regex, '$1' + 'upos-sz-mirrorali.bilivideo.com');
        if (newUrl !== videoElement.src) {
            videoElement.src = newUrl;
            console.log('已禁用IPv6地址,替换为IPv4地址');
        }
    }

    // 页面加载完成后执行
    if (document.readyState === 'complete' || document.readyState === 'interactive') {
        setTimeout(disableIPv6, 1000);
    } else {
        window.addEventListener('DOMContentLoaded', () => {
            setTimeout(disableIPv6, 1000);
        });
    }

    // 监听SPA页面变化
    let lastUrl = location.href;
    new MutationObserver(() => {
        const currentUrl = location.href;
        if (currentUrl !== lastUrl) {
            lastUrl = currentUrl;
            setTimeout(disableIPv6, 1000);
        }
    }).observe(document, { subtree: true, childList: true });
})();

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址