Greasy Fork is available in English.

Nicovideo:GINZA-HTML5 autoset 1080p

If 1080p is available, set to 1080p automatically.

Від 16.01.2018. Дивіться остання версія.

// ==UserScript==
// @name         Nicovideo:GINZA-HTML5 autoset 1080p
// @namespace    https://twitter.com/tigerauge0
// @version      1.05
// @description  If 1080p is available, set to 1080p automatically.
// @author       HAC
// @match        http://www.nicovideo.jp/watch/*
// @grant        none
// ==/UserScript==

(function() {
    'use strict';

    let observer = new MutationObserver(function (mutationRecords, thisObserver) {
        //console.log('Obserbing');
        for(let mutationRecord of mutationRecords) {
            let dropdownMenuDomObj;
            // 最初に自動と低が表示されてから、後で.PlayerOptionDropdown-menuノード指定で変更が入り、細かい画質が追加される
            // 以下はその検証(コメントアウト)
            /*
            let mylog = '';
            if(mutationRecord.target.classList.contains('PlayerOptionDropdown-menu')) {
                dropdownMenuDomObj = mutationRecord.target;
                mylog += 'this: ';
            }
            let tempNode = mutationRecord.target.getElementsByClassName('PlayerOptionDropdown-menu');
            if(tempNode.length) {
                dropdownMenuDomObj = tempNode[0];
                mylog += 'children: ';
            }
            if(mylog !== '' && dropdownMenuDomObj !== undefined) {
                for(let dropdownItemDomObj of dropdownMenuDomObj.childNodes) {
                    if(dropdownItemDomObj.classList.contains('PlayerOptionDropdownItem')) {
                        for(let dropdownItemInnerDomObj of dropdownItemDomObj.childNodes) {
                            if(dropdownItemInnerDomObj.classList.contains('PlayerOptionDropdownItem-inner')) {
                                mylog += dropdownItemInnerDomObj.textContent + ', ';
                            }
                        }
                    }
                }
                console.log(mylog);
                console.log(mutationRecord.target);
            }
            */
            if((dropdownMenuDomObj = mutationRecord.target).classList.contains('PlayerOptionDropdown-menu')) {
                let dropdownItemTopDomObj, dropdownItemTopInnerDomObj;
                if(dropdownMenuDomObj.childNodes.length && (dropdownItemTopDomObj = dropdownMenuDomObj.childNodes[0]).classList.contains('PlayerOptionDropdownItem')) {
                    if(dropdownItemTopDomObj.childNodes.length && (dropdownItemTopInnerDomObj = dropdownItemTopDomObj.childNodes[0]).classList.contains('PlayerOptionDropdownItem-inner')) {
                        if(/1080p/.test(dropdownItemTopInnerDomObj.textContent)) {
                            if(!dropdownItemTopDomObj.classList.contains('is-disabled')) {
                                console.log("1080p is available.");
                                dropdownItemTopInnerDomObj.click();
                                let autoPlayDomObj, playButtonDomObj;
                                if((autoPlayDomObj = document.getElementById('AutoPlayMenuItem-on')) && autoPlayDomObj.checked === true){
                                    if((playButtonDomObj = document.getElementsByClassName('PlayerPlayButton')).length) {
                                        playButtonDomObj = playButtonDomObj[0];
                                        for(let playButtonChildDomObj of playButtonDomObj.childNodes) {
                                            if(playButtonChildDomObj.classList.contains('ControllerButton-inner')){
                                                console.log("Autoplay start.");
                                                playButtonChildDomObj.click();
                                            }
                                        }
                                    }
                                }
                            } else {
                                console.log("1080p is not available because of low-quality mode.");
                            }
                        } else {
                            console.log("1080p doesn't exist.");
                        }
                        // 問題点: .PlayerOptionDropdownItem[0]が検出できなかった場合、Observeし続ける
                        thisObserver.disconnect();
                        break;
                    }
                }
            }
        }
    });
    observer.observe(document.getElementById('js-app'), { childList: true, subtree: true});
})();