查看: 4717|回复: 1
收起左侧

[讨论] 通过Userscripts JS脚本去除优酷视频广告

 关闭 [复制链接]
cikorsky
发表于 2012-5-28 18:29:55 | 显示全部楼层 |阅读模式
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,放入浏览器的脚本文件夹。

温馨提示:每次打开优酷视频,第一次加载可能有点慢,但是绝对是值得的。
  1. // ==UserScript==
  2. // @name           OpenGG.Clean.Player
  3. // @namespace      http://OpenGG.me
  4. // @description    OpenGG.Clean.Player
  5. // @version        1.14
  6. // @updateURL      https://userscripts.org/scripts/source/120679.meta.js
  7. // @downloadURL    https://userscripts.org/scripts/source/120679.user.js
  8. // @match          http://*/*
  9. // @match          https://*/*
  10. // @exclude        http://www.kuaipan.cn/*
  11. // ==/UserScript==
  12. (function () {
  13.         'use strict';
  14.         function run(callback) {
  15.                 var script = document.createElement('script');
  16.                 script.textContent = '(' + callback.toString() + ')();';
  17.                 document.body.appendChild(script);
  18.         }
  19.         function main() {
  20.                 var CONSTANTS = {
  21.                         PLAYER_DOM:        'object[data],embed[src],iframe[src]',
  22.                         PLAYERS: [
  23.                                 {
  24.                                         find: /http:\/\/static\.youku\.com\/.*q?(player|loader)(_taobao)?\.swf/,
  25.                                         replace: 'http://player.opengg.me/loader.swf'
  26.                                 },
  27.                                 {
  28.                                         find: /http:\/\/js\.tudouui\.com\/.*\/TudouVideoPlayer_Homer_.*.swf/,
  29.                                         replace: 'http://player.opengg.me/TudouVideoPlayer_Homer_237.swf'
  30.                                 },
  31.                                 {
  32.                                         find: /http:\/\/player\.youku\.com\/player\.php\//,
  33.                                         replace: 'http://player.opengg.me/player.php/'
  34.                                 },
  35.                                 {
  36.                                         find: /http:\/\/www.tudou.com\/(([a-z]|programs)\/.*)/,
  37.                                         replace: 'http://player.opengg.me/td.php/$1'
  38.                                 }
  39.                         ],
  40.                         SHARE_DOM: '#panel_share input,input#copyInput.txt',
  41.                         SHARES: [
  42.                                 {
  43.                                         find: /http:\/\/player\.youku\.com\/player\.php\//,
  44.                                         replace: 'http://player.opengg.me/player.php/'
  45.                                 },
  46.                                 {
  47.                                         find: /http:\/\/www.tudou.com\/(.*v\.swf)/,
  48.                                         replace: 'http://player.opengg.me/td.php/$1'
  49.                                 }
  50.                         ],
  51.                         TIPS_HOLDER: '#miniheader,#gTop',
  52.                         TIPS: '<div class="tips_container">OpenGG.Clean.Player \u5DF2\u542F\u7528&emsp;<a href="http://opengg.me/781/opengg-clean-player/" style="color:blue" target="_blank">\u53CD\u9988</a>&emsp;<a href="http://opengg.me/donation/" style="color:red" title="\u6211\u8981\u6350\u52A9\u6B64\u9879\u76EE" target="_blank">\u6350\u52A9</a></div>',
  53.                         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}',
  54.                         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;}',
  55.                         TOGGLE_BTN: '#toggleGoogle'
  56.                 };
  57.                 var DONE = [];
  58.                 var UTIL = {
  59.                         addCss: function (str) {
  60.                                 var style = document.createElement('style');
  61.                                 style.textContent = str;
  62.                                 document.head.appendChild(style);
  63.                         },
  64.                         reloadFlash: function (elem) {
  65.                                 var nextSibling = elem.nextSibling;
  66.                                 var parentNode = elem.parentNode;
  67.                                 parentNode.removeChild(elem);
  68.                                 if (nextSibling) {
  69.                                         parentNode.insertBefore(elem, nextSibling);
  70.                                 } else {
  71.                                         parentNode.appendChild(elem);
  72.                                 }
  73.                         },
  74.                         initFlash: function (elem) {
  75.                                 // console.log(elem);
  76.                                 if (DONE.indexOf(elem) !== -1) {
  77.                                         return;
  78.                                 }
  79.                                 if (this.rewriteFlash(elem)) {
  80.                                         this.reloadFlash(elem);
  81.                                         DONE.push(elem);
  82.                                 }
  83.                         },
  84.                         rewriteFlash: function (elem) {
  85.                                 var atrs = ['data', 'src'];
  86.                                 var players = CONSTANTS.PLAYERS;
  87.                                 var needReload = false;
  88.                                 UTIL.forEach(atrs, function (atr) {
  89.                                         UTIL.forEach(players, function (player) {
  90.                                                 if (elem[atr] && player.find.test(elem[atr])) {
  91.                                                         elem[atr] = elem[atr].replace(player.find, player.replace);
  92.                                                         needReload = true;
  93.                                                 }
  94.                                         });
  95.                                 });
  96.                                 return needReload;
  97.                         },
  98.                         forEach: function (arr, callback) {
  99.                                 if (this.isArrayLike(arr)) {
  100.                                         if (Array.prototype.forEach) {
  101.                                                 Array.prototype.forEach.call(arr, callback);
  102.                                         } else {
  103.                                                 var i = 0;
  104.                                                 for (i = 0; i < arr.length; ++i) {
  105.                                                         callback.call(arr[i], arr[i]);
  106.                                                 }
  107.                                         }
  108.                                 }
  109.                         },
  110.                         isArrayLike: function (obj) {
  111.                                 if (typeof obj !== 'object') {
  112.                                         return false;
  113.                                 }
  114.                                 var types = ['Array', 'NodeList', 'HTMLCollection'];
  115.                                 var i = 0;
  116.                                 for (i = 0; i < types.length; ++i) {
  117.                                         if (Object.prototype.toString.call(obj).indexOf(types[i]) !== -1) {
  118.                                                 return true;
  119.                                         }
  120.                                 }
  121.                                 return false;
  122.                         }
  123.                 };
  124.                 function init() {
  125.                         function onDOMNodeInsertedHandler(e) {
  126.                                 var target = e.target;
  127.                                 if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) {
  128.                                         UTIL.initFlash(target);
  129.                                 }
  130.                         }
  131.                         function onAnimationStartHandler(e) {
  132.                                 if (e.animationName === 'nodeInserted') {
  133.                                         var target = e.target;
  134.                                         // console.log(target);
  135.                                         if (target.nodeType === 1 && /OBJECT|EMBED|IFRAME/ig.test(target.nodeName)) {
  136.                                                 UTIL.initFlash(target);
  137.                                         }
  138.                                 }
  139.                         }
  140.                         UTIL.addCss(CONSTANTS.NODEINSERTED_HACK);
  141.                         /*Firefox*/
  142.                         document.body.addEventListener('animationstart', onAnimationStartHandler, false);
  143.                         /*/Firefox*/
  144.                         /*Chrome*/
  145.                         document.body.addEventListener('webkitAnimationEnd', onAnimationStartHandler, false);
  146.                         /*/Chrome*/
  147.                         /*Opera 12+*/
  148.                         document.body.addEventListener('oAnimationStart', onAnimationStartHandler, false);
  149.                         /*/Opera 12+*/
  150.                         /*IE, but I never tested this*/
  151.                         document.body.addEventListener('msAnimationStart', onAnimationStartHandler, false);
  152.                         /*/IE, but I never tested this*/
  153.                         if (/Opera/.test(navigator.userAgent) && !(/Version\/12/.test(navigator.userAgent))) {
  154.                                 /*Old fashion, slower maybe*/
  155.                                 document.body.addEventListener('DOMNodeInserted', onDOMNodeInsertedHandler, false);
  156.                                 var matches = document.body.querySelectorAll(CONSTANTS.PLAYER_DOM);
  157.                                 UTIL.forEach(matches, function (elem) {
  158.                                         UTIL.initFlash(elem);
  159.                                 });
  160.                         }
  161.                 }
  162.                 function tips() {
  163.                         var holder = document.body.querySelector(CONSTANTS.TIPS_HOLDER);
  164.                         if (holder) {
  165.                                 var div = document.createElement('div');
  166.                                 if (document.defaultView.getComputedStyle(holder, null).getPropertyValue('position') !== 'relative') {
  167.                                         div.style.position = 'relative';
  168.                                 }
  169.                                 div.innerHTML = CONSTANTS.TIPS;
  170.                                 holder.appendChild(div);
  171.                                 UTIL.addCss(CONSTANTS.STYLE);
  172.                         }
  173.                 }
  174.                 function share(elem) {
  175.                         var pairs = CONSTANTS.SHARES;
  176.                         UTIL.forEach(pairs, function (item) {
  177.                                 elem.value = elem.value.replace(item.find, item.replace);
  178.                         });
  179.                 }
  180.                 var CONTROLLER = [
  181.                         {
  182.                                 host: '.',
  183.                                 fn: function () {
  184.                                         init();
  185.                                 }
  186.                         },
  187.                         {
  188.                                 host: 'youku.com',
  189.                                 fn: function () {
  190.                                         // UTIL.addCss(CONSTANTS.STYLE);

  191.                                         var matches = document.body.querySelectorAll(CONSTANTS.SHARE_DOM);
  192.                                         UTIL.forEach(matches, share);

  193.                                         tips();

  194.                                         var youkuPlayer = document.body.querySelector('.playBox');
  195.                                         var notWide = !document.body.querySelector('.playBox_thx');
  196.                                         if (youkuPlayer && notWide) {
  197.                                                 youkuPlayer.className += ' playBox_thx';
  198.                                         }
  199.                                 }
  200.                         },
  201.                         {
  202.                                 host: 'tudou.com',
  203.                                 fn: function () {
  204.                                         // UTIL.addCss(CONSTANTS.STYLE);
  205.                                         tips();
  206.                                         var tudouPlayer = document.body.querySelector('#playerObject');
  207.                                         var normalDom = document.querySelector('.normal');
  208.                                         if (tudouPlayer && normalDom) {
  209.                                                 normalDom.className = normalDom.className.replace('normal','widescreen');
  210.                                         }
  211.                                         var g = (typeof unsafeWindow !== 'undefined') ? unsafeWindow : window;
  212.                                         var TUI_copyToClip = g.TUI.copyToClip;
  213.                                         g.TUI.copyToClip = function () {
  214.                                                 var matches = document.body.querySelectorAll(CONSTANTS.SHARE_DOM);
  215.                                                 UTIL.forEach(matches, share);
  216.                                                 TUI_copyToClip.apply(g.TUI, arguments);
  217.                                         };
  218.                                 }
  219.                         }
  220.                 ];
  221.                 var host = location.host;
  222.                 function PROC(item) {
  223.                         if (host.indexOf(item.host) !== -1) {
  224.                                 item.fn();
  225.                                 return;
  226.                         }
  227.                 }
  228.                 UTIL.forEach(CONTROLLER, PROC);
  229.         }
  230.         if (typeof unsafeWindow !== 'undefined') {
  231.                 main();
  232.         } else {
  233.                 run(main);
  234.         }
  235. })();
复制代码
cikorsky
 楼主| 发表于 2012-5-28 18:33:09 | 显示全部楼层
首次发帖,链接没有自动识别,自己不知为何修改帖子后无法保存,保存是提示没有输入标题或内容
您需要登录后才可以回帖 登录 | 快速注册

本版积分规则

手机版|杀毒软件|软件论坛| 卡饭论坛

Copyright © KaFan  KaFan.cn All Rights Reserved.

Powered by Discuz! X3.4( 沪ICP备2020031077号-2 ) GMT+8, 2025-2-3 11:54 , Processed in 0.122158 second(s), 16 queries .

卡饭网所发布的一切软件、样本、工具、文章等仅限用于学习和研究,不得将上述内容用于商业或者其他非法用途,否则产生的一切后果自负,本站信息来自网络,版权争议问题与本站无关,您必须在下载后的24小时之内从您的电脑中彻底删除上述信息,如有问题请通过邮件与我们联系。

快速回复 客服 返回顶部 返回列表