YouTube Auto HD

自动选择YouTube视频的最高画质

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name         YouTube Auto HD
// @namespace    https://blog.hgtrojan.com
// @version      1.6.1
// @description  自动选择YouTube视频的最高画质
// @author       HgTrojan
// @match        *://www.youtube.com/*
// @grant        none
// @license      GNU
// ==/UserScript==


(function() {
    'use strict';

    let highestQuality = null;

    function setHighestQuality() {
        const video = document.querySelector('video');
        if (video) {
            const player = document.querySelector('.html5-video-player');
            if (player) {
                const availableQualityLevels = player.getAvailableQualityLevels();
                if (availableQualityLevels && availableQualityLevels.length > 0) {
                    highestQuality = availableQualityLevels[0];
                    console.log("Setting quality to: " + highestQuality);
                    player.setPlaybackQualityRange(highestQuality, highestQuality);
                    player.setPlaybackQuality(highestQuality);

                    // 在标签页标题中显示提示信息
                    displayMessage("设置画质为 " + highestQuality);
                } else {
                    console.warn("Hgtrojan: 未能找到可用的清晰度级别");
                }
            } else {
                console.warn("Hgtrojan: 未能找到视频播放器");
            }
        } else {
            console.warn("Hgtrojan: 未能找到视频元素");
        }
    }

    function checkAndMaintainHighestQuality() {
        const video = document.querySelector('video');
        if (video) {
            const player = document.querySelector('.html5-video-player');
            if (player && highestQuality) {
                const currentQuality = player.getPlaybackQuality();
                if (currentQuality !== highestQuality) {
                    console.log("Maintaining quality at: " + highestQuality);
                    player.setPlaybackQuality(highestQuality);
                }
            }
        }
    }

    function checkUrlAndSetQuality() {
        if (window.location.href.includes('watch')) {
            setHighestQuality();
            // 每隔5秒检查并保持最高画质
            setInterval(checkAndMaintainHighestQuality, 5000);
        }
    }

    function displayMessage(message) {
        document.title = message;
        // 10秒后恢复原来的标题
        setTimeout(() => {
            document.title = originalTitle;
        }, 10000);
    }

    const originalTitle = document.title;

    // 创建MutationObserver实例
    const observer = new MutationObserver(function(mutations) {
        mutations.forEach(function(mutation) {
            if (mutation.addedNodes) {
                mutation.addedNodes.forEach(function(node) {
                    if (node.nodeName === 'VIDEO') {
                        setTimeout(checkUrlAndSetQuality, 1000);
                    }
                });
            }
        });
    });

    // 开始观察整个文档,包括所有子节点和后代节点
    observer.observe(document, { childList: true, subtree: true });

    // 初始加载时设置最高清晰度
    window.addEventListener('yt-player-updated', checkUrlAndSetQuality);
    window.addEventListener('yt-navigate-finish', checkUrlAndSetQuality);
})();