// ==UserScript== // @name youtube记忆画面清晰度 // @namespace Violentmonkey Scripts // @match *://www.youtube.com/watch?v=* // @match *://www.youtube.com/* // @grant none // @version 3.4 // @author lazy cat // @description 2023/7/27 11:45:08 // @run-at document-end // @license MIT // @homepageURL https://greasyfork.org/zh-CN/scripts/473553-youtube%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AF%E6%9C%80%E9%AB%98%E7%94%BB%E8%B4%A8 // @homepage https://greasyfork.org/zh-CN/scripts/473553-youtube%E9%BB%98%E8%AE%A4%E5%BC%80%E5%90%AF%E6%9C%80%E9%AB%98%E7%94%BB%E8%B4%A8 // @downloadURL none // ==/UserScript== (function(){ function t_stop(num){ return new Promise((resolve)=>{setTimeout(resolve, num)}) } function save_art(e){ localStorage.setItem('user_articulation', e) } // 获取视频id function get_voice_pid() { try { let player = document.querySelector('div[id="movie_player"]') let pid = player.getVideoData().video_id return pid }catch (e) { return null } } // 获取url上的视频pid async function get_url_pid() { let re_data = /v=(\w+)/ let pid = url.match(re_data) if (pid.length < 1){ t_stop(100) return get_url_pid() } else{ return pid[1] } } // 保存数据到本地 function save_voice_pid(art){ if (now_pid == get_voice_pid()){ localStorage.setItem('user_articulation', art) } } async function set_max_voice_px() { if (j_num>50){ return } let player = document.querySelector('div[id="movie_player"]') if (player && player.getAvailableQualityLevels && player.getAvailableQualityLevels().length > 0){ await t_stop(500) let v_list = player.getAvailableQualityLevels() let user_articulation = localStorage.getItem('user_articulation') // 根据本地数据进行判断 if (!user_articulation){ player.setPlaybackQualityRange(v_list[0]) } else{ if (v_list.includes(user_articulation)){ player.setPlaybackQualityRange(user_articulation) } else{ let original_data = ['tiny', 'small', 'medium', 'large', 'hd720', 'hd1080', 'hd1440', 'hd2160', 'hd2880', 'highres'].reverse() let u_index = original_data.indexOf(user_articulation) let need_list = original_data.slice(u_index+1) if (need_list.length === 0){ player.setPlaybackQualityRange(v_list[0]) j_num = 0 // 保存清晰度 player.addEventListener('onPlaybackQualityChange', save_voice_pid) return } for (let a of need_list){ if (v_list.includes(a)){ player.setPlaybackQualityRange(a) break } } } } j_num = 0 // 保存清晰度 player.addEventListener('onPlaybackQualityChange', save_voice_pid) } else{ j_num++ await t_stop(100) set_max_voice_px() } } function list_judgment() { set_max_voice_px() //循环检查页面是否改变 setInterval(() => { new_url = String(window.location.href) if (new_url != url){ now_pid = get_url_pid() j_num = 0 set_max_voice_px() url = new_url } }, 1000); } //开始运行程序 var j_num = 0 var new_url = '' var url = String(window.location.href) var now_pid = '' list_judgment() })()