您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
NewPipe button, force H.264 ≤30FPS, persistent quality lock, HW acceleration and opening videos and shorts in new tab so that pressing back gets you to previous tab without reloading.
// ==UserScript== // @name YouTube enhancer for Via // @namespace https://viayoo.com/ // @version 1.3 // @license MIT // @description NewPipe button, force H.264 ≤30FPS, persistent quality lock, HW acceleration and opening videos and shorts in new tab so that pressing back gets you to previous tab without reloading. // @author jc // @match *://*.youtube.com/* // @match *://*.youtube-nocookie.com/* // @match *://*.youtubekids.com/* // @match https://m.youtube.com/* // @exclude *://www.youtube.com/*/music* // @exclude *://music.youtube.com/* // @run-at document-start // @grant none // ==/UserScript== (function() { 'use strict'; // 1. FORCE H.264 & ≤30 FPS EVERYWHERE (function(){ const BAD = /webm|vp8|vp9|av01/i; const FR = /framerate=(\d+)/; const ms = window.MediaSource; if (!ms) return; const orig = ms.isTypeSupported.bind(ms); ms.isTypeSupported = type => { if (typeof type !== 'string' || BAD.test(type)) return false; const m = FR.exec(type); if (m && +m[1] > 30) return false; return orig(type); }; })(); // 2. GPU-KICK HACK: hidden 1×1 WebGL canvas (offscreen/no styling touch) (function(){ try { const c = document.createElement('canvas'); c.width = 1; c.height = 1; // use OffscreenCanvas if available const ctx = (window.OffscreenCanvas ? new OffscreenCanvas(1,1).getContext('webgl') : c.getContext('webgl')); // we never add it to the DOM, but context init triggers GPU paths } catch (e) { // ignore } })(); // 3. YOUTUBE-ONLY: NewPipe download button if (/^https?:\/\/(?:\w+\.)?youtube\.com/.test(location.href)) { (function addNewPipeBtn(){ function makeBtn(){ const btn = document.createElement('div'); btn.textContent = '↓'; Object.assign(btn.style, { position: 'fixed', bottom: '80px', right: '16px', width: '44px', height: '44px', display: 'flex', alignItems: 'center', justifyContent: 'center', fontSize: '24px', background: '#222', color: '#fff', borderRadius: '50%', boxShadow: '0 2px 10px rgba(0,0,0,0.3)', cursor: 'pointer', zIndex: 999999, opacity: '0.6', transition: 'opacity .2s, transform .2s' }); btn.addEventListener('mouseenter', ()=> btn.style.opacity='1'); btn.addEventListener('mouseleave', ()=> btn.style.opacity='0.6'); btn.addEventListener('click', ()=>{ let id = new URL(location.href).searchParams.get('v'); if (!id) { const m = location.pathname.match(/\/shorts\/([^\/?&]+)/); id = m && m[1]; } if (id) { location.href = `intent://www.youtube.com/watch?v=${id}#Intent;scheme=https;package=org.schabi.newpipe;end`; } }); document.body.appendChild(btn); } if (document.body) makeBtn(); else new MutationObserver((_, obs)=>{ if (document.body) { obs.disconnect(); makeBtn(); } }).observe(document.documentElement,{childList:true}); })(); // 4. YOUTUBE-ONLY: Persistent quality locker (function(){ const KEY = 'yt_quality_preference'; // watch menu for clicks on “240p, 360p, …” new MutationObserver(()=>{ document.querySelectorAll('.ytp-menuitem-label') .forEach(el=>{ if (/^\d+p$/.test(el.textContent)) { el.addEventListener('click',()=>{ localStorage.setItem(KEY, el.textContent); },{once:true}); } }); }).observe(document.documentElement,{childList:true,subtree:true}); const apply = ()=>{ const q = localStorage.getItem(KEY); if (!q) return; const setQ = ()=>{ const vid = document.querySelector('video'); const player = vid?.player_ || window.ytplayer?.config?.args || (window.yt && yt.player && yt.player.getPlayerByElement && yt.player.getPlayerByElement(document.querySelector('#movie_player'))); try { player?.setPlaybackQuality(q); player?.setPlaybackQualityRange?.(q); } catch(e){} }; const t = setInterval(setQ, 1000); setTimeout(()=> clearInterval(t), 8000); }; document.addEventListener('yt-navigate-finish', apply); window.addEventListener('load', apply); })(); // 5. YOUTUBE-ONLY MOBILE: open video links in new tab if (/^https?:\/\/m\.youtube\.com/.test(location.href)) { document.body.addEventListener('click', e=>{ const a = e.target.closest('a[href]'); if (!a) return; const u = a.href; if ((u.includes('/watch?v=') || u.includes('/shorts/')) && !a.closest('ytm-pivot-bar-renderer') && !a.closest('ytm-player-controls-overlay-renderer') && !a.closest('.player-controls-middle')) { e.preventDefault(); e.stopPropagation(); window.open(u, '_blank'); } }, true); } } })();