您需要先安装一个扩展,例如 篡改猴、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);
- }
- }
- })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址