Youtube Mobile自动画质与倍速

记录并自动使用上一次的播放速度与画质

// ==UserScript==
// @name         Youtube Mobile自动画质与倍速
// @namespace    http://tampermonkey.net/
// @license      MIT
// @version      0.0.2
// @description  记录并自动使用上一次的播放速度与画质
// @author       Eric
// @match        https://m.youtube.com/watch*
// @icon         data:image/gif;base64,R0lGODlhAQABAAAAACH5BAEKAAEALAAAAAABAAEAAAICTAEAOw==
// @grant        none
// @run-at       document-end
// ==/UserScript==

(function() {
    'use strict';

    const getPlayer = () => {
        const l = document.getElementsByClassName("html5-video-player");
        if (l.length === 0) return null;
        return l[0];
    }

    const wait = duration => new Promise((res) => {
        setTimeout(res, duration);
    });

    let player;
    let retry = 0;
    const keepGetPlayer = async () => {
        player = getPlayer();
        console.log(player);
        if (!player && retry++ < 5) {
            await wait(1000);
            await keepGetPlayer();
        }
    }

    (async () => {
        await keepGetPlayer();
    })();

    if (!player) {
        console.warn("no player found");
        return;
    }

    const container = document.querySelector('#player-control-container');
    if (!container) return;

    container.addEventListener('click', () => {
        const settingsIcon = document.querySelector('.player-settings-icon');
    if (!settingsIcon) return;

        const onSettingsIconClick = async () => {
            settingsIcon.removeEventListener('click', onSettingsIconClick);

            await wait(200);

            const speedSelect = document.querySelector('.player-speed-settings > select');
            speedSelect.addEventListener('change', e => {
                localStorage.setItem('yarq:speed', speedSelect.value);
            })

            const qualitySelect = document.querySelector('.player-quality-settings > select');
            qualitySelect.addEventListener('change', e => {
                localStorage.setItem('yarq:quality', qualitySelect.value);
            })
        }
        settingsIcon.addEventListener('click', onSettingsIconClick);


    })

    const speed = localStorage.getItem('yarq:speed');
    speed && player.setPlaybackRate(+speed);

    const quality = localStorage.getItem('yarq:quality');
    quality && player.setPlaybackQualityRange(quality);
})();

QingJ © 2025

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