// ==UserScript== // @name vipVideos_skipAd // @namespace vipVideos_skipAd // @author xinggsf~gmail。com // @description 油库、土~逗 VIP免费看,去iqiyi、sohu视频广告 // @homepageURL https://greasyfork.org/scripts/8561 // updateURL https://greasyfork.org/scripts/8561.js // @require https://greasyfork.org/scripts/11230.js // @license GPL version 3 // @include http* // @exclude http://play.baidu.com/* // @exclude http://www.hunantv.com/* // @version 2015.9.13 // @encoding utf-8 // @grant unsafeWindow // @downloadURL none // ==/UserScript== //开启GPU硬件加速,如果显卡不支持无效,请换direct!参考了thunderhit的代码: // https://greasyfork.org/zh-CN/scripts/6479,但用定时器太低效了 -function(doc) { var style = doc.createElement('style'); style.textContent = '@-webkit-keyframes gAnimatAct{from{opacity:0.99;}to{opacity:1;}}@keyframes gAnimatAct{from{opacity:0.99;}to{opacity:1;}}embed,object{animation:gAnimatAct 1ms;-webkit-animation:gAnimatAct 1ms;}'; doc.head.appendChild(style); var ckplayerMark = '', iqiyiMark = '', PLAYER_URL = [ { urls: [ /^http:\/\/static\.youku\.com\/.*?q?(play|load)er(_[^.]+)?\.swf/, /^http:\/\/player\.youku\.com\/player\.php\/.*?sid\/(.*?)\/.*?v\.swf$/, /^http:\/\/player\.youku\.com\/embed\//, ], swfMark: '', varsMatch: /VideoIDS=(\w+)/, //不判断,只是加入一个按钮 isProc: function(p, fv, src) { if (!doc.domain.endsWith('youku.com')) { var t = PLAYER_URL[0], m = src.match(t.urls[1]) || src.match(t.varsMatch); m && setPlayer(p, t.swfMark.format(m)); return !m; } setTimeout(scrollTo(0, 99), 9); unsafeWindow._ssPlayer = ckplayerMark.format(fv.match(/VideoIDS=(\w+)/)); doc.querySelector("div#ab_pip").outerHTML = '换播放器'; return !0; } },{ urls: [/^http:\/\/js\.tudouui\.com\/.*?Player.*?\.swf/], swfMark: ckplayerMark, varsMatch: /vcode=([^&]+)/, //有播放时间限制即替换播放器 isProc: function(p, fv) { if (!doc.domain.endsWith('tudou.com')) { openFlashGPU(p); return !1; } setTimeout(scrollTo(0, 99), 9); if (! /paidTime=\d{2,}&/.test(fv)) { setObjectVal(p, 'wmode', 'gpu'); return !1; } var div = doc.querySelector("#summary>div:last-of-type"); div.innerHTML = '换原播放器'; div.style.display = 'block'; unsafeWindow.document.getElementById('a-rpPlayer')._ssPlayer = p.outerHTML.replace('direct','gpu'); return !0; } },{ urls: [ /^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/MainPlayer_\w+\.swf/], run: function(p, src, t) { var m = {'src': src}; m.fvars = getFlashvars(p, 'flashVars').replace(/&(?:cid|tipdataurl|\w+?Time|cpn\w|\w+?loader|adurl|yhls|exclusive|webEventID|videoIsFromQidan)=[^&]*/g,'') + '&cid=qc_100001_300089'; setPlayer(p, iqiyiMark.format(m)); } }, { urls: [ /^http:\/\/www\.iqiyi\.com\/common\/flashplayer\/\d+\/PPS\w+\.swf/, //安装PPS插件才能播放 // /^http:\/\/www\.iqiyi\.com\/player\/cupid\/common\/pps_\w+\.swf/ ], run: function(p, src, t) { var m = {'src': src}, s = getFlashvars(p); if (s.indexOf('&cid=') === -1) { alert('不支持!安装PPS插件才能播放!'); return; } m.fvars = s.replace(/&?(?:cid|coreUrl|tipdataurl|preloader|adurl|P00001|expandState)=[^&]+/g,'') +'&cid=qc_100001_300089'; setPlayer(p, iqiyiMark.format(m)); } }, { urls: [ /^http:\/\/(?:\d+\.){3}\d+\/(?:test|web)player\/Main\w*\.swf$/, /^http:\/\/tv\.sohu\.com\/upload\/swf\/.+?\/Main\.swf$/, ], //http://update.adbyby.com/swf/sohu_livezb.swf //http://opengg.guodafanli.com/adkiller/sohu_live.swf run: function(p, src, t) { //if (!doc.domain.endsWith('tv.sohu.com')) return; var s = p.getAttribute('flashvars') .replace(/&(?:plid|api_key|on\w*?Ad\w*)=[^&]*/g, '') //.replace(/(&on\w*?Ad\w*=)[^&]*/g,'$1') + '&plid=7038006&api_key=647bfb88a84fc3c469d289f961993be6'; s = p.outerHTML.replace(/(flashvars=")[^"]+/, '$1'+ s) .replace(/wmode="[^"]+/, 'wmode="gpu'); //.replace(src, 'http://100.100.100.100/swf/sohu.swf'); setPlayer(p, s); } } ]; function openFlashGPU(p) { if (!isPlayer(p)) return; 'EMBED' === p.tagName ? p.setAttribute('wmode', 'gpu') : setObjectVal(p, 'wmode', 'gpu'); flushPlayer(p); } function isPlayer(p) { console.log(p.width, p.height); if (p.width < 33 || p.height < 12)//也包括对百分比值设定的处理 return !1; return 'EMBED' === p.tagName ? p.getAttribute('allowFullScreen') === 'true' : [].some.call(p.children, function(o) { console.log(o); return o.value === 'true' && o.name.toLowerCase() === 'allowfullscreen'; }); } function flushPlayer(o) { delEvent(); //chrome就刷body if (!window.chrome) return; o = doc.body; var s = o.style.display; o.style.display = 'none'; setTimeout(function () { o.style.display = s; }, 9); } function delEvent() { doc.body.removeEventListener('animationstart', onAnimationStart); doc.body.removeEventListener('webkitAnimationStart', onAnimationStart); doc.body.removeEventListener('oAnimationStart', onAnimationStart); doc.head.removeChild(style); } function setPlayer(play, oHtml) { console.log('player new html: ', oHtml); delEvent(); play.outerHTML = oHtml; } function setObjectVal(p, name, v) { var e = p.querySelector('embed'); e && e.setAttribute(name, v); name = name.toLowerCase(); if ([].some.call(p.children, function(o) { if (o.name && o.name.toLowerCase() === name) { o.value = v; return true; } })) return; e = doc.createElement('param'); e.name = name; e.value = v; p.appendChild(e); } function getFlashvars(p, vName) { vName = vName || 'flashvars'; return 'EMBED' === p.tagName ? p.getAttribute(vName) : p.children[vName].value; } function onAnimationStart(ev) { //ev.returnValue = !1; ev.cancelBubble = true; if (ev.animationName !== 'gAnimatAct') return true; var e = ev.target;//ev && ev.target || Event.srcElement console.log('AnimationStart:', ev, e); //防止OBJECT - EMBED结构重复处理 if ('EMBED' === e.tagName && 'OBJECT' === e.parentNode.tagName) return; var t, addr = e.src || e.data || e.children.movie.value; for (t of PLAYER_URL) { if (t.urls.some(function(reg) { return reg.test(addr); })) {//if if (t.run) {//custom function t.run(e, addr, t); return; } var v = getFlashvars(e); if (!t.isProc || t.isProc(e, v, addr)) { // if (v) a = v.match(t.varsMatch); // if (!a) a = addr.match(t.varsMatch); // console.log(a); if (v = v.match(t.varsMatch)) setPlayer(e, t.swfMark.format(v)); } return; } } openFlashGPU(e); } doc.body.addEventListener('animationstart', onAnimationStart, false); doc.body.addEventListener('webkitAnimationStart', onAnimationStart, false); doc.body.addEventListener('oAnimationStart', onAnimationStart, false); }(document);