Youtube Video Max Volume Patch

Override the html5 video volume to 1 when player's volume slider is set to 100%.

이 스크립트를 설치하려면 Tampermonkey, Greasemonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

You will need to install an extension such as Tampermonkey to install this script.

이 스크립트를 설치하려면 Tampermonkey 또는 Violentmonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey 또는 Userscripts와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 Tampermonkey와 같은 확장 프로그램이 필요합니다.

이 스크립트를 설치하려면 유저 스크립트 관리자 확장 프로그램이 필요합니다.

(이미 유저 스크립트 관리자가 설치되어 있습니다. 설치를 진행합니다!)

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 Stylus와 같은 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

이 스타일을 설치하려면 유저 스타일 관리자 확장 프로그램이 필요합니다.

(이미 유저 스타일 관리자가 설치되어 있습니다. 설치를 진행합니다!)

// ==UserScript==
// @name         Youtube Video Max Volume Patch
// @namespace    http://github.com/jaytohe/
// @version      0.2
// @description  Override the html5 video volume to 1 when player's volume slider is set to 100%.
// @author       jaytohe
// @license      MIT
// @match        https://www.youtube.com/*
// @run-at       document-idle
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    const curr_volume = () => document.querySelector('div[class^="ytp-volume-panel"]').getAttribute('aria-valuenow');
    const get_video = () => document.querySelector('video[src]'); //video[src] is used to prevent accidental firing on bogus video in homepage

    const forceMaxVol = (event) => {
        if (curr_volume() === '100') {
            event.target.volume = 1;
        }

    }
    const initHijack = (video) => {
        if (video !== null && curr_volume() !== null) {
            console.log('Patching max volume...');

            if (curr_volume() === '100') //in case video autoplays
                video.volume = 1;

            if (video.onplay === null)
                video.onplay = forceMaxVol;

            if(video.onvolumechange === null)
                video.onvolumechange = forceMaxVol;
        }
    }
    const wait_for_video = setInterval(function() {
        if (get_video() !== null) {
            console.log('[YOTUBE MAX VOLUME PATCH] -- FOUND VIDEO.');
            setTimeout(()=>initHijack(get_video()), 1000);
            clearInterval(wait_for_video);
        }
    }, 500);
})();