Greasy Fork is available in English.

vipVideos_skipAd

优酷、土豆VIP免费看,去iqiyi、pps、sohu视频广告!全新改版,利用CSS3动画事件,旧的浏览器不推荐升级

Verzia zo dňa 21.03.2015. Pozri najnovšiu verziu.

// ==UserScript==
// @name           vipVideos_skipAd
// @namespace      vipVideos_skipAd
// @author	       xinggsf~gmail。com
// @description    优酷、土豆VIP免费看,去iqiyi、pps、sohu视频广告!全新改版,利用CSS3动画事件,旧的浏览器不推荐升级
// @homepageURL    https://greasyfork.org/scripts/8561
// downloadURL     https://greasyfork.org/scripts/8561/code/vipVideos_skipAd.user.js
// @license        GPL version 3
// @match          http://*/*
// @match          https://*/*
// @version        2.0
// @modified       2015.03.21
// @encoding       utf-8
// @grant          none
// ==/UserScript==
+function(win) {
var doc = win.document,
style = doc.createElement('style');
style.textContent = '@-moz-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@-webkit-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@-o-keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}@keyframes nodeInserted{from{opacity:0.99;}to{opacity:1;}}embed,object{animation:nodeInserted 1ms;-webkit-animation:nodeInserted 1ms;-moz-animation:nodeInserted 1ms;-o-animation:nodeInserted 1ms;}';
doc.head.appendChild(style);

function Overload(fn_objs) {
	var is_match = function (x, y) {
		if (x == y)
			return true;
		if (x.indexOf("*") == -1)
			return false;

		var x_arr = x.split(","),
		y_arr = y.split(",");
		if (x_arr.length != y_arr.length)
			return false;
		while (x_arr.length) {
			var x_first = x_arr.shift(),
			y_first = y_arr.shift();
			if (x_first != "*" && x_first != y_first)
				return false;
		}
		return true;
	};
	var ret = function () {
		var args = arguments,
		args_len = args.length,
		args_types = [],
		args_type,
		fn_objs = args.callee._fn_objs,
		match_fn = function () {};

		for (var i = 0; i < args_len; i++) {
			var type = typeof args[i];
			type == "object" && (args[i].length > -1) && (type = "array");
			args_types.push(type);
		}
		args_type = args_types.join(",");
		for (var k in fn_objs) {
			if (is_match(k, args_type)) {
				match_fn = fn_objs[k];
				break;
			}
		}
		return match_fn.apply(this, args);
	};
	ret._fn_objs = fn_objs;
	return ret;
}
String.prototype.format = Overload({
	"array" : function (params) {
		var reg = /{(\d+)}/gm;
		return this.replace(reg, function (match, key) {
			return params[~~key];
		});
	},
	"object" : function (param) {
		var reg = /{([^{}]+)}/gm;
		return this.replace(reg, function (match, key) {
			return param[key];
		});
	}
});
Object.prototype.extend = function(obj){
	for (var i in obj) {
		//obj.hasOwnProperty(i) &&
		(this[i] = obj[i]);
	}
};

var PLAYER_DOM = {'OBJECT':'data','EMBED':'src'},//,'IFRAME':'src'
PLAYER_URL = {
	youku: {
		urls: [
			/^http:\/\/static\.youku\.com\/.*?q?(player|loader)(_[^.]+)?\.swf/,
			/^http:\/\/player\.youku\.com\/player\.php\/.*sid\/(.*)\/.*v\.swf$/,
			/^http:\/\/player\.youku\.com\/embed\//,
		],
		swfMark: '<embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.buguanji.com/Public/Home/player/20141007/player.swf" width="100%" height="100%" id="movie_player" name="movie_player" bgcolor="#000000" isfullscreen="true" allowfullscreen="true" allowscriptaccess="always" wmode="transparent" flashvars="isShowRelatedVideo=false&showAd=0&show_ce=0&showsearch=0&VideoIDS={vid}&isAutoPlay=true&winType=BDskin&Type=PlayList">',
		varsMatch: /VideoIDS=([^&]+)/,
		isProc: function(p, fv) {
			return !0;
		}
	},
	tudou: {
		urls: [
			/^http:\/\/js\.tudouui\.com\/.*?\/TudouYoukuPlayer_Homer[^.]*?\.swf/,
			/^http:\/\/js\.tudouui\.com\/.*?\/PortalPlayer[^.]*?\.swf/,
			/^http:\/\/js\.tudouui\.com\/.*?\/TudouVideoPlayer_Homer_[^.]*?.swf/,
		],
		swfMark: '<embed type="application/x-shockwave-flash" pluginspage="http://www.macromedia.com/go/getflashplayer" src="http://www.buguanji.com/Public/Home/player/20141007/player.swf" width="100%" height="100%" id="tudouHomePlayer" name="tudouHomePlayer" bgcolor="#000" isfullscreen="true" allowfullscreen="true" allowscriptaccess="always" wmode="transparent" flashvars="isShowRelatedVideo=false&showAd=0&show_ce=0&showsearch=0&VideoIDS={vid}&isAutoPlay=true&winType=BDskin&Type=PlayList">',
		varsMatch: /vcode=([^&]+)/,
		isProc: function(p, fv) {
			//有播放时间限制即进行处理
			return /paidTime=\d{2,}&/.test(fv);
		}
	},
	iqiyi: {
	urls: [			
	/^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/MainPlayer_.+\.swf/,	
	/^http:\/\/(player|dispatcher)\.video\.i?qiyi\.com\/(.*[\?&]vid=)?([^\/&]+).*/i,
	],
		swfMark: '<embed data-widget-player="flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" quality="hight" devicefont="false" allowfullscreen="true" menu="true" type="application/x-shockwave-flash" width="100%" height="100%" id="flash" bgcolor="#000" wmode="transparent" align="middle" allowscriptaccess="always" src="{src}" flashvars="{fvars}&components=fefb1060e&autoplay=true&cid=qc_100001_300089&origin=true&outsite=false">',
		varsMatch: /(?:tvId|flashP2PCoreUrl|definitionID|vid)=[^&]+/g,
		run: function(p, src, t) {
			var m = {'src': src},
			s = getFlashvars(p, 'flashVars');
			console.log('flashVars:', s);
			m.fvars = s.match(t.varsMatch).join('&')
				.replace('vid=','definitionID=');
			console.log('run var m:', m);
			setPlayer(p, t.swfMark.format(m));
		}
	},
	pps: {
		urls: [
		/^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/PPSMainPlayer_.+\.swf/,
		/^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/PPSPlayer_.+\.swf/,
		],
		swfMark: '<embed data-widget-player="flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" quality="hight" devicefont="false" allowfullscreen="true" menu="true" type="application/x-shockwave-flash" width="100%" height="100%" align="middle" allowscriptaccess="always" src="http://www.iqiyi.com/common/flashplayer/20150311/MainPlayer_5_2_19_3_c3_2_4.swf" id="flash" bgcolor="#000" wmode="transparent" flashvars="components=feffbfe6e0&{fvars}&autoplay=true&flashP2PCoreUrl=http://www.iqiyi.com/common/flashplayer/20150216/30032.swf&cid=qc_100001_100141&origin=true&outsite=false">',
		varsMatch: /(?:tvId|definitionID|vid)=[^&]+/g,
		run: function(p, src, t) {
			var m = {},
			s = getFlashvars(p);
			m.fvars = s.match(t.varsMatch).join('&')
				.replace('vid=','definitionID=');
			setPlayer(p, t.swfMark.format(m));
		}
	},
	pps_old: {
		urls: [
		/^http:\/\/www\.iqiyi\.com\/player\/cupid\/common\/pps_flvplay_s\.swf/,
		/^http:\/\/www\.pps\.tv\/player\/\d+\/player\.swf/i,
		],
		swfMark: '<embed data-widget-player="flash" pluginspage="http://www.macromedia.com/go/getflashplayer" play="true" quality="hight" devicefont="false" allowfullscreen="true" menu="true" type="application/x-shockwave-flash" width="100%" height="100%" align="middle" allowscriptaccess="always" src="{src}" id="myDynamicContent" bgcolor="#000" wmode="transparent" flashvars="{fvars}">',
		run: function(p, src, t) {
			var m = {'src': src};
			m.fvars = getFlashvars(p);
			setPlayer(p, t.swfMark.format(m));
		}
	},
	sohu: {
		urls: [
			/^http:\/\/tv\.sohu\.com\/upload\/swf\/\d+\/Main\.swf/,
			/^http:\/\/tv\.sohu\.com\/upload\/swf\/p2p\/\d+\/Main\.swf/,
		],
		run: function(p, src, t) {
			var s = p.getAttribute('flashvars')
				.replace(/.*?&vid=([^&]+).*/,'&vid=$1&plid=7038006&changeRateBtn=1&jump=0&skin=0&likeBtn=0&autoplay=true&downloadBtn=0&cinemaBtn=0&bfBtn=0&shareBtn=0&sogouBtn=0&showRecommend=0&showCtrlBar=1&skinNum=1&ua=http://tv.&api_key=647bfb88a84fc3c469d289f961993be6&cmscat=1&topBarFull=1&imgCutBtn=0&sid=null&isListPlay=1&playListId=1&nid=1&pid=1&pageurl=http://www.sohu.com');
			//p.setAttribute('flashvars', s);
			s = p.outerHTML.replace(/flashvars="[^"]+"/,
				'flashvars="'+ s +'"');
			setPlayer(p, s);
		}
	}
};
function getStyle(o, s) {
	if (o.style[s]) return o.style[s];
	if (win.getComputedStyle) {//DOM
		var x = win.getComputedStyle(o, null);
		//s = s.replace(/([A-Z])/g,'-$1').toLowerCase();
		return x && x[s];
	}
}
function setPlayer(play, oHtml) {
	win.setTimeout(function () {
		doc.body.removeEventListener('animationstart', onAnimationStart);
		doc.body.removeEventListener('webkitAnimationStart', onAnimationStart);
		doc.body.removeEventListener('oAnimationStart', onAnimationStart);
		play.outerHTML = oHtml;
	}, 99);
}
function getFlashvars(p, vName) {
	arguments.length < 2 && (vName = 'flashvars');
	return 'EMBED' === p.tagName ?
		p.getAttribute(vName) :
		p.children[vName].value;
}

function onAnimationStart(ev) {
	var e = ev.target;//(ev && ev.target) || Event.srcElement
	console.log('AnimationStart:', ev, e);
	if ('EMBED' === e.tagName && 'OBJECT' === e.parentNode.tagName)
		return;
	if (e.width < 5 || e.height < 5 ||
		'none' === getStyle(e, 'display'))
	{
		e.parentNode.removeChild(e);
		return;
	}

	var t, i,
	pn = PLAYER_DOM[e.tagName],//地址属性名 OBJECT:'data', EMBED:'src'
	addr = e[pn];
	for (i in PLAYER_URL) {
		t = PLAYER_URL[i];
		if (t.urls.some(function(r) {
			return r.test(addr);
		})) {//if
			console.log('reg:', t);
			if (t.run) {//自定义处理过程
				t.run(e, addr, t);
				return;
			}
			var s, v = getFlashvars(e);
			if (t.isProc && !t.isProc(e, v)) return;
			s = v.match(t.varsMatch)[1];
			if (!s) return;
			s = {'vid': s};
			setPlayer(e, t.swfMark.format(s));
			return;
		}
	}
}
//Firefox
doc.body.addEventListener('animationstart', onAnimationStart, false);
//Chrome
doc.body.addEventListener('webkitAnimationStart', onAnimationStart, false);
//Opera 12+
doc.body.addEventListener('oAnimationStart', onAnimationStart, false);
}(window);