您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Replace YouTube embeds with inv.nadeko.net embeds.
// ==UserScript== // @name Invidious (inv.nadeko.net) embed // @description Replace YouTube embeds with inv.nadeko.net embeds. // @author Backend & SkauOfArcadia // @homepage https://codeberg.org/mthsk/userscripts/src/branch/master/invidious-embed // @include * // @exclude *://*.youtube.com/* // @exclude *://*.google.com/* // @exclude *://turntable.fm/* // @exclude *://web.archive.org/web/* // @exclude *://*/embed/* // @exclude *://*/watch?v=* // @inject-into content // @version 2025.03 // @grant none // @allFrames true // @namespace https://gf.qytechs.cn/users/751327 // ==/UserScript== (function() { "use strict"; const instance = "inv.nadeko.net"; const a = -1; //defines autoplay value on the initial page load const b = -1; //defines autoplay for embedded videos that appear on page interaction // -1 = will only autoplay if the embed has the "autoplay=1" parameter // 0 = disables autoplay // 1 = enables autoplay const dash = false; //defines if the quality=dash parameter will be used var observer = new MutationObserver(mutate); observer.observe(document, { childList: true, attributes: true, subtree: true }); function mutate() { go(b); } function go(auto) { let frames = document.body.querySelectorAll('iframe[src], embed[src]'); frames = Object.values(frames).filter(youtubeiFrame); for (let i = 0; i < frames.length; i++) { let frame = frames[i]; let invid = frame.src; let params = new URLSearchParams(); if (invid.indexOf('?') !== -1) { params = new URLSearchParams(invid.substring(invid.indexOf('?') + 1).split('#')[0]); invid = invid.split('?')[0]; } else if (invid.indexOf('&') !== -1) { params = new URLSearchParams(invid.substring(invid.indexOf('&') + 1).split('#')[0]); invid = invid.split('&')[0]; } params.delete('controls'); if (params.get('v')) { invid = 'https://' + instance + '/embed/' + params.get('v'); params.delete('v'); } else if (invid.toLowerCase().indexOf('/embed/') !== -1) { invid = 'https://' + instance + '/embed/' + invid.substring(invid.toLowerCase().indexOf('/embed/') + 7).split('/')[0].split(';')[0]; } else if (invid.toLowerCase().indexOf('/v/') !== -1) { invid = 'https://' + instance + '/embed/' + invid.substring(invid.toLowerCase().indexOf('/v/') + 3).split('/')[0].split(';')[0]; } else invid = 'https://' + instance + '/' + invid.split('/')[3].split(';')[0]; if (auto !== -1) { params.set('autoplay', auto); } else if (!params.get('autoplay')) { params.set('autoplay', 0); } if ((parseInt(frame.width, 10) <= 4 || parseInt(frame.style.width, 10) <= 4) && (parseInt(frame.height, 10) <= 4 || parseInt(frame.style.height, 10) <= 4) && params.get('autoplay') === '1') { params.set('listen', 1); } if(dash){ params.set('quality', 'dash'); } invid += '?' + params; frame.setAttribute('src', invid); if (frame.hasAttribute('srcdoc')) { frame.removeAttribute('srcdoc'); } if (frame.tagName.toLowerCase() === 'embed'){ let newframe = document.createElement('iframe'); newframe.innerHTML = frame.innerHTML; frame.getAttributeNames().forEach(attrName => { newframe.setAttribute(attrName, frame.getAttribute(attrName)); }); frame.parentNode.replaceChild(newframe, frame); } } //Replace thumbnail embeds let thumbs = document.body.querySelectorAll('img[src*="img.youtube.com"], img[src*="i.ytimg.com"]'); for (let x = 0; x < thumbs.length; x++) { let thumb = thumbs[x]; let thumbsrc = new URL(thumb.src); if (thumbsrc.hostname === "img.youtube.com" || thumbsrc.hostname === "i.ytimg.com") { thumb.getAttributeNames().forEach(attrName => { if (attrName !== 'src' && thumb.getAttribute(attrName).indexOf(thumbsrc.hostname) !== -1) thumb.setAttribute(attrName, thumb.getAttribute(attrName).replace(thumbsrc.hostname, instance)); }); thumb.setAttribute('src', thumbsrc.protocol + '//' + instance + thumbsrc.pathname + thumbsrc.search + thumbsrc.hash); } } } function youtubeiFrame(el) { try { let url = new URL(el.src); return (url.hostname === "youtube.com" || url.hostname.endsWith(".youtube.com") || url.hostname === "youtube-nocookie.com" || url.hostname.endsWith(".youtube-nocookie.com") || url.hostname === "youtu.be" || url.hostname.endsWith(".youtu.be")); } catch (_) { return false; } } go(a); })();
QingJ © 2025
镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址