OpenGG.Clean.Player userscript脚本
内容转载自鲁夫的爱,http://opengg.me/,作者原创不易,转载请注明出处。
使用这个, 原来的Youku.Clean.Player升级为此脚本,可以把优酷和土豆的站内播放器替换成去广告和去隐私收集功能的播放器.
如果你不知道什么是userscript,不知怎么使用,请出门右转百度一下,或者点此http://note.sdo.com/u/cikorsky/n/kYhkI~jRYdbywE05400cVi
支持浏览器: Chrome, Opera, Firefox+Greasemonkey 等.
功能:
去除原版播放器播放前的超时等待( 原版土豆和优酷播放器在播放前都会等待约4秒, ABP+Chinalist 无法绕过这个delay );
替换土豆优酷站内播放器;
替换土豆优酷外链播放器(感谢YoukuAntiADs 和Harv.c ).
已测试版本:
Chrome 18.0.1025.162 m Win32 + Shockwave Flash 11.2 r202 NPAPI gcswf32.dll
Firefox 11.0 Win32 + Greasemonkey 0.9.18 + NPSWF32_11_2_202_233.dll
Firefox 14.0a1 Win64 + Greasemonkey 0.9.18 + NPSWF32_11_2_202_233.dll
Opera 11.62 1347 Win32 Windows 7 + NPSWF32_11_2_202_233.dll
搜狗浏览器3.2
以下为脚本代码,可以和youkuss并用,在调整窗口布局大小的同时,屏蔽广告。也可以点此链接下载脚本文件,https://userscripts.org/scripts/show/120679
复制下面代码,新建文本文档,粘贴,然后修改文件及其扩展名为OpenGG.clean.player.user.js,放入浏览器的脚本文件夹。
温馨提示:每次打开优酷视频,第一次加载可能有点慢,但是绝对是值得的。- // ==UserScript==
- // @name OpenGG.Clean.Player
- // @namespace http://OpenGG.me
- // @description OpenGG.Clean.Player
- // @version 1.14
- // @updateURL https://userscripts.org/scripts/source/120679.meta.js
- // @downloadURL https://userscripts.org/scripts/source/120679.user.js
- // @match http://*/*
- // @match https://*/*
- // @exclude http://www.kuaipan.cn/*
- // ==/UserScript==
- (function () {
- 'use strict';
- function run(callback) {
- var script = document.createElement('script');
- script.textContent = '(' + callback.toString() + ')();';
- document.body.appendChild(script);
- }
- function main() {
- var CONSTANTS = {
- PLAYER_DOM: 'object[data],embed[src],iframe[src]',
- PLAYERS: [
- {
- find: /http:\/\/static\.youku\.com\/.*q?(player|loader)(_taobao)?\.swf/,
- replace: 'http://player.opengg.me/loader.swf'
- },
- {
- find: /http:\/\/js\.tudouui\.com\/.*\/TudouVideoPlayer_Homer_.*.swf/,
- replace: 'http://player.opengg.me/TudouVideoPlayer_Homer_237.swf'
- },
- {
- find: /http:\/\/player\.youku\.com\/player\.php\//,
- replace: 'http://player.opengg.me/player.php/'
- },
- {
- find: /http:\/\/www.tudou.com\/(([a-z]|programs)\/.*)/,
- replace: 'http://player.opengg.me/td.php/$1'
- }
- ],
- SHARE_DOM: '#panel_share input,input#copyInput.txt',
- SHARES: [
- {
- find: /http:\/\/player\.youku\.com\/player\.php\//,
- replace: 'http://player.opengg.me/player.php/'
- },
- {
- find: /http:\/\/www.tudou.com\/(.*v\.swf)/,
- replace: 'http://player.opengg.me/td.php/$1'
- }
- ],
- TIPS_HOLDER: '#miniheader,#gTop',
- TIPS: '<div class="tips_container">OpenGG.Clean.Player \u5DF2\u542F\u7528 <a href="http://opengg.me/781/opengg-clean-player/" style="color:blue" target="_blank">\u53CD\u9988</a> <a href="http://opengg.me/donation/" style="color:red" title="\u6211\u8981\u6350\u52A9\u6B64\u9879\u76EE" target="_blank">\u6350\u52A9</a></div>',
- STYLE: '.playBox_thx #player.player,.playBox_thx #player.player object{min-height:' + Math.max(window.innerHeight * 0.6, 580) + 'px !important}.tips_container{position:absolute;bottom:-2em;right:50px;color:green;opacity:0.4}.tips_container:hover{opacity:0.8}.tips_container #toggleGoogle{color:red;cursor:pointer}',
- NODEINSERTED_HACK: '@-moz-keyframes nodeInserted{from{opacity:0;}to{opacity:1;}}@-webkit-keyframes nodeInserted{from{opacity:0;}to{opacity:1;}}@-o-keyframes nodeInserted{from{opacity:0;}to{opacity:1;}}@keyframes nodeInserted{from{opacity:0;}to{opacity:1;}}embed,object{animation-duration:.001s;-ms-animation-duration:.001s;-moz-animation-duration:.001s;-webkit-animation-duration:.001s;-o-animation-duration:.001s;animation-name:nodeInserted;-ms-animation-name:nodeInserted;-moz-animation-name:nodeInserted;-webkit-animation-name:nodeInserted;-o-animation-name:nodeInserted;}',
- TOGGLE_BTN: '#toggleGoogle'
- };
- var DONE = [];
- var UTIL = {
- addCss: function (str) {
- var style = document.createElement('style');
- style.textContent = str;
- document.head.appendChild(style);
- },
- reloadFlash: function (elem) {
- var nextSibling = elem.nextSibling;
- var parentNode = elem.parentNode;
- parentNode.removeChild(elem);
- if (nextSibling) {
- parentNode.insertBefore(elem, nextSibling);
- } else {
- parentNode.appendChild(elem);
- }
- },
- initFlash: function (elem) {
- // console.log(elem);
- if (DONE.indexOf(elem) !== -1) {
- return;
- }
- if (this.rewriteFlash(elem)) {
- this.reloadFlash(elem);
- DONE.push(elem);
- }
- },
- rewriteFlash: function (elem) {
- var atrs = ['data', 'src'];
- var players = CONSTANTS.PLAYERS;
- var needReload = false;
- UTIL.forEach(atrs, function (atr) {
- UTIL.forEach(players, function (player) {
- if (elem[atr] && player.find.test(elem[atr])) {
- elem[atr] = elem[atr].replace(player.find, player.replace);
- needReload = true;
- }
- });
- });
- return needReload;
- },
- forEach: function (arr, callback) {
- if (this.isArrayLike(arr)) {
- if (Array.prototype.forEach) {
- Array.prototype.forEach.call(arr, callback);
- } else {
- var i = 0;
- for (i = 0; i < arr.length; ++i) {
- callback.call(arr[i], arr[i]);
- }
- }
- }
- },
- isArrayLike: function (obj) {
- if (typeof obj !== 'object') {
- return false;
- }
- var types = ['Array', 'NodeList', 'HTMLCollection'];
- var i = 0;
- for (i = 0; i < types.length; ++i) {
- if (Object.prototype.toString.call(obj).indexOf(types[i]) !== -1) {
- return true;
- }
- }
- return false;
- }
- };
- function init() {
- function onDOMNodeInsertedHandler(e) {
- var target = e.target;
- if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) {
- UTIL.initFlash(target);
- }
- }
- function onAnimationStartHandler(e) {
- if (e.animationName === 'nodeInserted') {
- var target = e.target;
- // console.log(target);
- if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) {
- UTIL.initFlash(target);
- }
- }
- }
- UTIL.addCss(CONSTANTS.NODEINSERTED_HACK);
- /*Firefox*/
- document.body.addEventListener('animationstart', onAnimationStartHandler, false);
- /*/Firefox*/
- /*Chrome*/
- document.body.addEventListener('webkitAnimationEnd', onAnimationStartHandler, false);
- /*/Chrome*/
- /*Opera 12+*/
- document.body.addEventListener('oAnimationStart', onAnimationStartHandler, false);
- /*/Opera 12+*/
- /*IE, but I never tested this*/
- document.body.addEventListener('msAnimationStart', onAnimationStartHandler, false);
- /*/IE, but I never tested this*/
- if (/Opera/.test(navigator.userAgent) && !(/Version\/12/.test(navigator.userAgent))) {
- /*Old fashion, slower maybe*/
- document.body.addEventListener('DOMNodeInserted', onDOMNodeInsertedHandler, false);
- var matches = document.body.querySelectorAll(CONSTANTS.PLAYER_DOM);
- UTIL.forEach(matches, function (elem) {
- UTIL.initFlash(elem);
- });
- }
- }
- function tips() {
- var holder = document.body.querySelector(CONSTANTS.TIPS_HOLDER);
- if (holder) {
- var div = document.createElement('div');
- if (document.defaultView.getComputedStyle(holder, null).getPropertyValue('position') !== 'relative') {
- div.style.position = 'relative';
- }
- div.innerHTML = CONSTANTS.TIPS;
- holder.appendChild(div);
- UTIL.addCss(CONSTANTS.STYLE);
- }
- }
- function share(elem) {
- var pairs = CONSTANTS.SHARES;
- UTIL.forEach(pairs, function (item) {
- elem.value = elem.value.replace(item.find, item.replace);
- });
- }
- var CONTROLLER = [
- {
- host: '.',
- fn: function () {
- init();
- }
- },
- {
- host: 'youku.com',
- fn: function () {
- // UTIL.addCss(CONSTANTS.STYLE);
- var matches = document.body.querySelectorAll(CONSTANTS.SHARE_DOM);
- UTIL.forEach(matches, share);
- tips();
- var youkuPlayer = document.body.querySelector('.playBox');
- var notWide = !document.body.querySelector('.playBox_thx');
- if (youkuPlayer && notWide) {
- youkuPlayer.className += ' playBox_thx';
- }
- }
- },
- {
- host: 'tudou.com',
- fn: function () {
- // UTIL.addCss(CONSTANTS.STYLE);
- tips();
- var tudouPlayer = document.body.querySelector('#playerObject');
- var normalDom = document.querySelector('.normal');
- if (tudouPlayer && normalDom) {
- normalDom.className = normalDom.className.replace('normal','widescreen');
- }
- var g = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window;
- var TUI_copyToClip = g.TUI.copyToClip;
- g.TUI.copyToClip = function () {
- var matches = document.body.querySelectorAll(CONSTANTS.SHARE_DOM);
- UTIL.forEach(matches, share);
- TUI_copyToClip.apply(g.TUI, arguments);
- };
- }
- }
- ];
- var host = location.host;
- function PROC(item) {
- if (host.indexOf(item.host) !== -1) {
- item.fn();
- return;
- }
- }
- UTIL.forEach(CONTROLLER, PROC);
- }
- if (typeof unsafeWindow !== 'undefined') {
- main();
- } else {
- run(main);
- }
- })();
复制代码 |