Youtube 画质锁定

Youtube 画质锁定(一次选择后一直有效)

您需要先安裝使用者腳本管理器擴展,如 TampermonkeyGreasemonkeyViolentmonkey 之後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyViolentmonkey 後才能安裝該腳本。

您需要先安裝使用者腳本管理器擴充功能,如 TampermonkeyUserscripts 後才能安裝該腳本。

你需要先安裝一款使用者腳本管理器擴展,比如 Tampermonkey,才能安裝此腳本

您需要先安裝使用者腳本管理器擴充功能後才能安裝該腳本。

(我已經安裝了使用者腳本管理器,讓我安裝!)

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展,比如 Stylus,才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

你需要先安裝一款使用者樣式管理器擴展後才能安裝此樣式

(我已經安裝了使用者樣式管理器,讓我安裝!)

// ==UserScript==
// @name         Youtube 画质锁定
// @namespace    YYoutube quality lock
// @version      2023.08.29.01
// @description  Youtube 画质锁定(一次选择后一直有效)
// @author       James Wood
// @match        *://www.youtube.com/*
// @grant        none
// @license MIT
// ==/UserScript==

(async function() {
    'use strict';

    // 获取之前选择的视频画质
    let vidQuality = await GM.getValue('videoQuality', 1);
    console.log('之前选择的视频画质:', vidQuality);

    document.addEventListener('yt-player-updated', () => {

        /* 检查页面类型 */
        if (window.location.pathname != '/watch') {
            return;
        }

        console.log('视频播放器已更新');

        /* 加载设置面板 */
        let settingsBtn = document.querySelector('.ytp-settings-button');
        settingsBtn.click();
        settingsBtn.click();
        console.log('已点击设置按钮');

        /* 打开画质选择面板 */
        let qualityBtn = document.querySelector('.ytp-menuitem-content div:not(.ytp-menuitem-toggle-checkbox)');
        qualityBtn.click();
        let qualityOptions = document.querySelectorAll('.ytp-quality-menu .ytp-menuitem:not(:has(.ytp-premium-label))');
        console.log('可选画质:', qualityOptions);

        /* 关闭画质选择面板 */
        settingsBtn.click();
        settingsBtn.click();
        console.log('已关闭画质选择面板');

        /* 选择视频画质 */
        let nth_option = qualityOptions.length - vidQuality;
        console.log('nth_option:', nth_option);
        let selectedOption = qualityOptions[Math.max(0, nth_option)];
        console.log('selectedOption:', selectedOption);
        selectedOption.click();
        console.log('已选择视频画质:', selectedOption.textContent);

        /* 添加画质选择的事件监听器 */
        for (let i = 0; i < qualityOptions.length; ++i) {
            qualityOptions[i].addEventListener('click', () => {
                GM.setValue('videoQuality', qualityOptions.length - i);
                console.log('已更新视频画质:', qualityOptions.length - i);
            });
        }
    });

    console.log('YouTube固定视频画质脚本开始执行');
})();