Advertisement
Ikem

FlashBlock.user.js

Jun 16th, 2013
281
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name FlashBlock
  3. // @author Lex1
  4. // @version 1.2.12
  5. // @description FlashBlock for Chrome. Press Ctrl+Shift+F for permanent unblocking. Use Ctrl+Click for saving flash-video.
  6. // @namespace http://ruzanow.ru/index/0-4
  7. // @run-at document-start
  8. // @include http://*
  9. // ==/UserScript==
  10.  
  11. /*
  12.  * Copyright (c) 2009 by Alexey Ruzanov
  13.  *
  14.  * This program is free software; you can redistribute it and/or modify
  15.  * it under the terms of the GNU General Public License as published by
  16.  * the Free Software Foundation; either version 2 of the License.
  17.  *
  18.  * Graphic buttons (c)AVol Wert 2007.
  19.  *
  20.  */
  21.  
  22. (function(){
  23. var exclude = ['google.com', 'blizzard.com', 'megaupload.com', 'files.mail.ru', 'gs.statcounter.com'];
  24. var css = 'object[classid$=":D27CDB6E-AE6D-11cf-96B8-444553540000"],object[classid$=":d27cdb6e-ae6d-11cf-96b8-444553540000"],object[codebase*="swflash.cab"],object[data*=".swf"],embed[type="application/x-shockwave-flash"],embed[src*=".swf"],object[type="application/x-shockwave-flash"],object[src*=".swf"],object[codetype="application/x-shockwave-flash"],iframe[type="application/x-shockwave-flash"],object[classid$=":166B1BCA-3F9C-11CF-8075-444553540000"],object[codebase*="sw.cab"],object[data*=".dcr"],embed[type="application/x-director"],embed[src*=".dcr"],object[type="application/x-director"],object[src*=".dcr"],object[classid$=":15B782AF-55D8-11D1-B477-006097098764"],object[codebase*="awswaxf.cab"],object[data*=".aam"],embed[type="application/x-authorware-map"],embed[src*=".aam"],object[type="application/x-authorware-map"],object[src*=".aam"],object[classid*="32C73088-76AE-40F7-AC40-81F62CB2C1DA"],object[type="application/ag-plugin"],object[type="application/x-silverlight"],object[type="application/x-silverlight-2"],object[source*=".xaml"],object[sourceelement*="xaml"],embed[type="application/ag-plugin"],embed[source*=".xaml"]{display: none !important;}';
  25. var flash = 'data:image/png;base64,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'
  26. var play = 'data:image/png;base64,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'
  27. var prefix = 'ujs_flashblock';
  28.  
  29. var addStyle = function(css){
  30.     var s = document.createElement('style');
  31.     s.setAttribute('type', 'text/css');
  32.     s.setAttribute('style', 'display: none !important;');
  33.     s.appendChild(document.createTextNode(css));
  34.     return (document.getElementsByTagName('head')[0] || document.documentElement).appendChild(s);
  35. };
  36.  
  37. var getValue = function(name){
  38.     if(window.localStorage){
  39.         return window.localStorage[name] || '';
  40.     }
  41.     else{
  42.         var nameEQ = name+'=';
  43.         var ca = document.cookie.split(';');
  44.         for(var i = 0, c; c = ca[i]; i++){
  45.             while(c.charAt(0) == ' ')c = c.substring(1, c.length);
  46.             if(c.indexOf(nameEQ) == 0)return unescape(c.substring(nameEQ.length, c.length));
  47.         };
  48.         return '';
  49.     }
  50. };
  51.  
  52. var setValue = function(name, value, days){
  53.     if(window.localStorage){
  54.         window.localStorage[name] = value;
  55.     }
  56.     else{
  57.         var date = new Date();
  58.         date.setTime(date.getTime()+((days || 10*365)*24*60*60*1000));
  59.         if(document.cookie.split(';').length < 30 && document.cookie.length-escape(getValue(name)).length+escape(value).length < 4000){
  60.             document.cookie = name+'='+escape(value)+'; expires='+date.toGMTString()+'; path=/';
  61.         }
  62.         else{
  63.             alert('Cookies is full!');
  64.         }
  65.     }
  66. };
  67.  
  68. var getVideo = function(flashvars, src){
  69.     var getLink = function(s){var rez = s.match(/[^\s\x22=&?]+\.[^\s\x22=&?\/]*(flv|mp4)/i); return rez ? rez[0] : ''};
  70.     var getQuery = function(s, q){var rez = s.match(new RegExp('[&?]'+q+'=([^&]+)')); return rez ? rez[1] : ''};
  71.     var getURL = function(f, s){return f.match(/^(\w+:\/\/|\/|$)/) ? f : s.replace(/[#?].*$/, '').replace(/[^\/]*$/, f)};
  72.  
  73.     var flv = decodeURIComponent(flashvars);
  74.     var q = '', url = location.href;
  75.  
  76.     if( url.indexOf('youtube.com/watch?') != -1 && (q = getQuery(flv, 'video_id')) )return 'http://www.youtube.com/get_video?video_id='+q+'&t='+getQuery(flv, 't')+'&fmt=18';
  77.     if( url.indexOf('video.google.com/videoplay?') != -1 && (q = getQuery(src, 'videoUrl')) )return decodeURIComponent(q);
  78.     if( url.indexOf('metacafe.com/watch/') != -1 && (q = getQuery(flv, 'mediaURL')) )return q+'?__gda__='+getQuery(flv, 'gdaKey');
  79.     if( url.indexOf('dailymotion.com/') != -1 && (q = getQuery(flv, 'video')) )return q.match(/[^@]+/);
  80.  
  81.     return getURL(getLink(flv) || decodeURIComponent(getLink(src)), src);
  82. };
  83.  
  84. var getParam = function(e, n){
  85.     var v = '', r = new RegExp('^('+n+')$', 'i');
  86.     var param = e.getElementsByTagName('param');
  87.     for(var i = 0, p; p = param[i]; i++){
  88.         if(p.hasAttribute('name') && p.getAttribute('name').match(r)){v = p.getAttribute('value'); break};
  89.     };
  90.     return v;
  91. };
  92.  
  93. var qualifyURL=function(url){
  94.     if(!url)return '';
  95.     var a = document.createElement('a');
  96.     a.href = url;
  97.     return a.href;
  98. };
  99.  
  100. var isBlocked = function(ele){
  101.     return getComputedStyle(ele, null).display  == 'none';
  102. };
  103.  
  104. var delStyle = function(css){
  105.     var styles = document.getElementsByTagName('style');
  106.     for(var i = 0, s; s = styles[i]; i++){
  107.         if(s.innerHTML == css){s.parentNode.removeChild(s); break}
  108.     }
  109. };
  110.  
  111. var delPlaceholders = function(){
  112.     var divs = document.getElementsByClassName(prefix+'_placeholder');
  113.     for(var j = divs.length - 1; j >= 0; j--)divs[j].parentNode.removeChild(divs[j]);
  114. };
  115.  
  116. var copyText = function(txt){
  117.     if(txt){
  118.         var txtArea = document.createElement('textarea');
  119.         txtArea.setAttribute('style', 'position:absolute;left:-999em;width:0;height:0;');
  120.         document.documentElement.appendChild(txtArea);
  121.         txtArea.value = txt;
  122.         txtArea.select();
  123.         document.execCommand('Copy');
  124.         txtArea.parentNode.removeChild(txtArea);
  125.     }
  126. };
  127.  
  128. var createMenu = function(pos, items){
  129.     var container = document.getElementById(prefix+'_menu');
  130.     if(container)container.parentNode.removeChild(container);
  131.     container = document.createElement('div');
  132.     container.setAttribute('style', 'display:block;overflow:hidden;position:fixed;top:'+pos.y+'px;left:'+pos.x+'px;margin:0;padding:2px;background-color:white;color:black;border:1px solid gray;z-index:1000;');
  133.     container.id = prefix+'_menu';
  134.     var menu = document.createElement('ul');
  135.     menu.setAttribute('style', 'margin:0;padding:0;list-style:none;');
  136.     container.appendChild(menu);
  137.     for(var i = 0, item; item = items[i]; i++){
  138.         var list = document.createElement('li');
  139.         list.setAttribute('style', 'font-family:tahoma,sans-serif;font-size:11px;line-height:normal;white-space:nowrap;list-style-position:outside;cursor:default;'+(item[0] == '' ? 'margin:3px;padding:0;border-top:1px solid gray' : 'margin:0;padding:3px 9px;'));
  140.         list.appendChild(document.createTextNode(item[0]));
  141.         if(item[1]){
  142.             list.onclick = item[1];
  143.             list.onmouseover = function(){this.style.backgroundColor = '#316AC5'; this.style.color = 'white'};
  144.             list.onmouseout = function(){this.style.backgroundColor = 'white'; this.style.color = 'black'};
  145.         };
  146.         list.oncontextmenu = function(ev){ev.preventDefault(); ev.stopPropagation()};
  147.         menu.appendChild(list);
  148.     };
  149.     document.addEventListener('click', function(e){this.removeEventListener(e.type, arguments.callee, false); container.parentNode.removeChild(container)}, false);
  150.     return document.documentElement.appendChild(container);
  151. };
  152.  
  153. var createImage = function(ele){
  154.     var embed = ele.getElementsByTagName('embed')[0];
  155.     var src = ele.getAttribute('src') || ele.getAttribute('source') || ele.getAttribute('data') || getParam(ele, 'movie|data|src|code|filename|url|source') || (embed && embed.getAttribute('src'));
  156.     var d = document.createElement('div');
  157.     d.setAttribute('style', 'display:inline-block;visibility:visible;overflow:hidden;z-index:999;border:1px dotted #bbbbbb;min-width:33px;min-height:33px;height:'+getComputedStyle(ele, null).height+';width:'+getComputedStyle(ele, null).width+';background:url('+flash+')no-repeat center;cursor:pointer;-webkit-box-sizing:border-box;');
  158.     d.setAttribute('title', qualifyURL(src));
  159.     d.onmouseover = function(){d.style.backgroundImage = 'url('+play+')'};
  160.     d.onmouseout = function(){d.style.backgroundImage = 'url('+flash+')'};
  161.     d.className = prefix+'_placeholder';
  162.     d.onclick = function(ev){
  163.         ev.preventDefault();
  164.         ev.stopPropagation();
  165.         if(!ev.shiftKey && (ev.ctrlKey || ev.metaKey) && !ev.altKey && src){
  166.             location.href = getVideo(ele.getAttribute('flashvars') || getParam(ele, 'flashvars'), src) || src;
  167.         }
  168.         else{
  169.             d.parentNode.removeChild(d);
  170.             ele.style.setProperty('display', 'inline-block', 'important');
  171.             if(embed && isBlocked(embed))embed.style.setProperty('display', 'inline-block', 'important');
  172.         };
  173.     };
  174.     d.oncontextmenu = function(ev){
  175.         ev.preventDefault();
  176.         ev.stopPropagation();
  177.         var videoUrl = getVideo(ele.getAttribute('flashvars') || getParam(ele, 'flashvars'), src);
  178.         createMenu(
  179.             {x: ev.clientX, y: ev.clientY},
  180.             [
  181.                 ['Disable FlashBlock on '+location.hostname, function(){delStyle(css); delPlaceholders(); setValue(prefix, 'unblocked')}],
  182.                 ['Hide placeholders on '+location.hostname, function(){delPlaceholders(); setValue(prefix, 'justblocked')}],
  183.                 [''],
  184.                 ['Copy flash address', function(){copyText(qualifyURL(src))}],
  185.                 videoUrl ? ['Copy flash-video address', function(){copyText(videoUrl)}] : null,
  186.                 videoUrl ? ['Download flash-video', function(){location.href = videoUrl}] : null
  187.             ]
  188.         );
  189.     };
  190.     ele.parentNode.insertBefore(d, ele);
  191. };
  192.  
  193. var createPlaceholders = function(){
  194.     var i, e, obj;
  195.     obj = document.getElementsByTagName('object');
  196.     for(i = 0; e = obj[i]; i++){if(isBlocked(e))createImage(e)};
  197.     obj = document.getElementsByTagName('embed');
  198.     for(i = 0; e = obj[i]; i++){if(isBlocked(e) && !isBlocked(e.parentNode))createImage(e)};
  199.     obj = document.getElementsByTagName('iframe');
  200.     for(i = 0; e = obj[i]; i++){if(e.getAttribute('type') == 'application/x-shockwave-flash' && isBlocked(e))createImage(e)};
  201. };
  202.  
  203.  
  204. // Exclude sites
  205. var host = location.hostname.replace(/^www\./, '');
  206. for(var i = 0; i < exclude.length; i++){if(host == exclude[i])return};
  207.  
  208. // Block Flash at loading page and create placeholders
  209. var val = getValue(prefix);
  210. if(val != 'unblocked'){
  211.     setTimeout(function(){addStyle(css)}, 1);
  212.     if(val != 'justblocked')window.addEventListener('load', function(){setTimeout(createPlaceholders, 300)}, false);
  213. };
  214.  
  215. // Unblock for the site, with Alt+F or Ctrl+Shift+F
  216. document.addEventListener('keydown', function(e){
  217.     if(e.keyCode == 70 && ((e.shiftKey && e.ctrlKey) != e.altKey)){
  218.         if(getValue(prefix) != 'unblocked'){
  219.             delStyle(css);
  220.             delPlaceholders();
  221.             setValue(prefix, 'unblocked');
  222.         }
  223.         else{
  224.             addStyle(css);
  225.             createPlaceholders();
  226.             setValue(prefix, 'blocked', -1);
  227.         };
  228.     };
  229. }, false);
  230. })();
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement