🏠 

Greasy Fork is available in English.

No Embed Youtube

replace embed iframe, object with anchor link.


安装此脚本?
// ==UserScript==
// @name No Embed Youtube
// @version 3.0.0
// @description replace embed iframe, object with anchor link.
// @homepageURL https://github.com/eight04/no-embed-youtube
// @supportURL https://github.com/eight04/no-embed-youtube/issues
// @license MIT
// @author eight04 <[email protected]>
// @namespace eight04.blogspot.com
// @include http*
// @exclude http://www.youtube.com/*
// @exclude https://www.youtube.com/*
// @exclude https://vimeo.com/*
// @run-at document-start
// @grant none
// ==/UserScript==
"use strict";
var xpath = `(
//iframe[
contains(@src, 'youtube.com/embed/') or
contains(@src, 'youtube.com/v/') or
contains(@src, 'youtube-nocookie.com/embed/') or
contains(@src, 'youtube-nocookie.com/v/') or
contains(@data-src, 'youtube.com/embed/') or
contains(@src, 'vimeo.com/video')
] |
//object[./param[contains(@value, 'youtube.com/v/')]] |
//embed[
contains(@src, 'youtube.com/v/') and
not(ancestor::object)
]
)[not(ancestor::*[@id='YTLT-player'])]`;
const patterns = [
{
test: /youtube(-nocookie)?\.com\/(embed|v)\/(.+?)(\?|&|$)/,
repl: match => `https://www.youtube.com/watch?v=${match[3]}`
},
{
test: /vimeo\.com\/video\/(\d+)/,
repl: match => `https://vimeo.com/${match[1]}`
}
];
var unEmbed = function(node){
var result = document.evaluate(
xpath, node, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null);
var element = null;
var i = 0, j;
while ((element = result.snapshotItem(i++))) {
// iframe or embed
var url = element.src || element.dataset.src;
// object
if(!url){
for(j = 0; j < element.childNodes.length; j++){
var pa = element.childNodes[j];
if(pa.nodeName == "PARAM" && pa.getAttribute("name") == "movie"){
url = pa.getAttribute("value");
break;
}
}
}
if(!url){
continue;
}
for (const pattern of patterns) {
const match = url.match(pattern.test);
if (!match) continue;
const newUrl = pattern.repl(match);
var a = document.createElement("a");
a.textContent = newUrl;
a.href = newUrl;
a.target = "_blank";
a.className = "unembed";
element.parentNode.replaceChild(a, element);
break;
}
}
};
new MutationObserver(function(){
if (document.body) {
unEmbed(document.body);
}
}).observe(document, {
childList: true,
subtree: true
});