No Embed Youtube

replace embed iframe, object with anchor link.

目前為 2015-03-19 提交的版本,檢視 最新版本

// ==UserScript==
// @name        No Embed Youtube
// @description	replace embed iframe, object with anchor link.
// @namespace   eight04.blogspot.com
// @include     http*
// @exclude		http://www.youtube.com/*
// @exclude		https://www.youtube.com/*
// @version     1.3.0
// @grant       none
// ==/UserScript==

"use strict";

var xpath = "//iframe[contains(@src,'youtube.com/embed/') and not(ancestor::*[@id='YTLT-player'])]|" +
	"//iframe[contains(@src,'youtube.com/v/') and not(ancestor::*[@id='YTLT-player'])]|" +
	"//object[./param[contains(@value,'youtube.com/v/')] and not(ancestor::*[@id='YTLT-player'])]|" +
	"//embed[contains(@src,'youtube.com/v/') and not(ancestor::object) and not(ancestor::*[@id='YTLT-player'])]";
	
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;
		
		// 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;
		}
		
		var id = url.match(/(embed|v)\/(.+?)(\?|&|$)/)[2];
		var a = document.createElement("a");
		var pageUrl = "http://www.youtube.com/watch?v=" + id;
		a.appendChild(document.createTextNode(pageUrl));
		a.setAttribute("href", pageUrl.replace("http:", ""));
		a.setAttribute("target", "_blank");
		a.className = "unembed";
		
		element.parentNode.replaceChild(a, element);
	}
};

unEmbed(document.documentElement);

var thread = function(){
	var data = [],
		maxLoop = 50,
		pos = 0,
		loopCount = 0,
		started = false;
		
	var worker = function(){
		for (loopCount = 0; pos < data.length && loopCount < maxLoop; pos++, loopCount++) {
			unEmbed(data[pos]);
		}
	};
	
	var start = function(){
		if (started) return;
		
		started = true;
		
		worker();
		
		if (pos < data.length) {
			loopCount = 0;
			setTimeout(worker, 16);
		} else {
			started = false;
			data = [];
			pos = 0;
		}
	};
	
	var queue = function(node){
		data.push(node);
	};
	
	return {
		start: start,
		queue: queue
	};
}();

var observer = function(){
	// Observer
	
	new MutationObserver(function(mutations){
		var i, j, m;
		for(i = 0; i < mutations.length; i++){
			m = mutations[i];
			if(m.type != "childList"){
				return;
			}
			for(j = 0; j < m.addedNodes.length; j++){
				thread.queue(m.addedNodes[j]);
			}
		}
		thread.start();
		
	}).observe(document.body, {
		childList: true,
		subtree: true
	});
}();

QingJ © 2025

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