Youtube to Invidious

Scan page for youtube embeds and urls and replace with Invidious.

目前為 2019-05-16 提交的版本,檢視 最新版本

// ==UserScript==
// @name        Youtube to Invidious
// @author      OdinBrood
// @namespace   Krul & Brood
// @description Scan page for youtube embeds and urls and replace with Invidious.
// @include     *
// @exclude     /^http(s|)://(m\.|www\.|)youtube\.com/.*$/
// @exclude     /^http(s|)://(www\.|)invidio\.us/.*$/
// @exclude     /^http(s|)://(www\.|)invidious\.snopyta\.org/.*$/
// @exclude     /^http(s|)://(www\.|)vid.wxzm\.sx/.*$/
// @exclude     /^http(s|)://(www\.|)invidious\.kabi\.tk/.*$/
// @exclude     /^http(s|)://(www\.|)invidiou\.sh/.*$/
// @exclude     /^http(s|)://(www\.|)invidious\.enkirton\.net/.*$/
// @exclude     /^http(s|)://(www\.|)tube\.poal\.co/.*$/
// @version     6.1
// ==/UserScript==

var instance="invidio.us"; //set you favorite invidious instance! (https://github.com/omarroth/invidious/wiki/Invidious-Instances)

var a=1; //set to 0 to force autoplay off, set to 1 to keep embed's default
var b=1; //set to 1 to replace all youtube links to invidious
var c=1; //set to 1 to enable DASH playback (invidious beta feature)

var ytdomains=new RegExp(/^http(s|)\:\/\/(m\.|www\.|)youtu(|be|be-nocookie)\.(com|be)\/.*$/);
var emdlydomains=new RegExp(/^http(s|)\:\/\/cdn\.embedly\.com\/.*$/);
var frames=Array.prototype.slice.call(document.getElementsByTagName('iframe')).filter(ytel);
var links=Array.prototype.slice.call(document.getElementsByTagName('a')).filter(ytel);
if(frames.length>0)embed();
if(links.length>0)link();
var observer=new MutationObserver(function(mutations){
  mutations.forEach(function(mutation){
    frames=Array.prototype.slice.call(mutation.target.getElementsByTagName('iframe')).filter(ytel);
    if(frames.length>0)embed();
    if(b==1){
      links=Array.prototype.slice.call(mutation.target.getElementsByTagName('a')).filter(ytel);
      if(links.length>0)link();
    }
  });
});
observer.observe(document.body,{childList:true,subtree:true});

function embed(){
  for(var i=0;i<frames.length;i++){
    var url=new URL(frames[i].src);
    if(url.href.match(emdlydomains)){
      url=new URL(decodeURIComponent(url.searchParams.get('src')));
      if(!url.href.match(ytdomains))return;
      url.searchParams.set('autoplay',0);
      frames[i].style.display=null;
      frames[i].removeAttribute("hidden");
    }
    url.hostname=instance;
    if(a==1){
      if(!url.searchParams.has('autoplay'))url.searchParams.set('autoplay',0);
    }else{
      url.searchParams.set('autoplay',0);
    }
    if(c==1)url.searchParams.set('quality','dash');
    url.searchParams.set('local',true);
    frames[i].src=url;
  }
}

function link(){
  for(var i=0;i<links.length;i++){
    var url=new URL(links[i].href);
    url.hostname=instance;
    url.searchParams.set('local',true);
    if(c==1)url.searchParams.set('quality','dash');
    links[i].href=url;
  }
}

function ytel(el){
  return ((el.hasAttribute('src')&&(el.src.match(ytdomains)||el.src.match(emdlydomains)))||(el.hasAttribute('href')&&el.href.match(ytdomains)));
}

QingJ © 2025

镜像随时可能失效,请加Q群300939539或关注我们的公众号极客氢云获取最新地址