You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
147 lines
5.4 KiB
JavaScript
147 lines
5.4 KiB
JavaScript
// ==UserScript==
|
|
// @name YouTube AdsFree
|
|
// @description Removes popup ads on videos
|
|
// @include http://*.youtube.com/*
|
|
// @include https://*.youtube.com/*
|
|
// @include http://youtube.com/*
|
|
// @include https://youtube.com/*
|
|
// @copyright Mikanoshi
|
|
// @version 1.4.2
|
|
// ==/UserScript==
|
|
|
|
( function () {
|
|
|
|
var plr;
|
|
var plrfv;
|
|
var brandeddiv1, brandeddiv2;
|
|
|
|
var addParam = function(line, name, val)
|
|
{
|
|
var regex = new RegExp("([\&\?])?"+name+"=[^\&\#]*", "g");
|
|
return regex.test(line) ? line.replace(regex, "$1"+name+"="+val) : line+"&"+name+"="+val;
|
|
}
|
|
|
|
var ObliterateAdsDyn = function()
|
|
{
|
|
try {
|
|
plr = document.getElementById('movie_player');
|
|
if (plr == null) plr = document.getElementById('movie_player-flash');
|
|
if (plr != null) {
|
|
plrfv = plr.getAttribute("flashvars");
|
|
if (plrfv.indexOf("noads_tag_enabled") > -1) return;
|
|
if (plrfv.indexOf("ad_host") > -1 ||
|
|
plrfv.indexOf("ad_tag") > -1 ||
|
|
plrfv.indexOf("ad_eurl") > -1 ||
|
|
plrfv.indexOf("ad2_") > -1 ||
|
|
plrfv.indexOf("ad3_") > -1 ||
|
|
plrfv.indexOf("use_meta_ad_player") > -1 ||
|
|
plrfv.indexOf("cta_xml") > -1)
|
|
{
|
|
plrmod = plr.cloneNode(true);
|
|
var varz = addParam(plrmod.getAttribute("flashvars"), "enablejsapi", "1");
|
|
varz = addParam(varz, "noads_tag_enabled", "1");
|
|
varz = varz.replace(/[\&\?\;](afv_ad_|ad_|ad2_|ad3_|cta_|infringe|invideo|watermark)(?!policy)([^=]*)?=[^\&]*/gi, "") + "&cta=false&invideo=false";
|
|
plrmod.setAttribute("flashvars", varz.replace(/(^[\&\?]*)|([\&\?]*$)/g, ""));
|
|
|
|
plr.parentNode.replaceChild(plrmod, plr);
|
|
}
|
|
}
|
|
} catch(err) { }
|
|
}
|
|
|
|
var InitListeners = function()
|
|
{
|
|
//Kill branded banner under the video if enabled
|
|
brandeddiv1 = document.getElementById("watch-branded-actions");
|
|
brandeddiv2 = document.getElementById("watch7-branded-banner");
|
|
opera.extension.addEventListener("message", function(e){
|
|
if (e.data.call == "isKillBranded" && e.data.dokill == "1") {
|
|
if (brandeddiv1) brandeddiv1.parentNode.removeChild(brandeddiv1);
|
|
if (brandeddiv2) brandeddiv2.parentNode.removeChild(brandeddiv2);
|
|
var contentdiv = document.getElementById("watch7-video-container")
|
|
if (contentdiv)
|
|
contentdiv.addEventListener('DOMAttrModified', function(e){
|
|
if (e.attrName === 'style') {
|
|
contentdiv.style.background = "transparent";
|
|
}
|
|
}, false);
|
|
}
|
|
}, false);
|
|
opera.extension.postMessage("isKillBranded");
|
|
|
|
//For dynamic video change on channel (profile) page
|
|
document.addEventListener('DOMNodeInserted', ObliterateAdsDyn, false);
|
|
ObliterateAdsDyn();
|
|
|
|
//Kill big banners on main page
|
|
var bigbannerdiv1 = document.getElementById("ad_creative_1");
|
|
if (bigbannerdiv1) bigbannerdiv1.parentNode.removeChild(bigbannerdiv1);
|
|
var bigbannerdiv2 = document.getElementById("premium-yva");
|
|
if (bigbannerdiv2) bigbannerdiv2.parentNode.removeChild(bigbannerdiv2);
|
|
var bigbannerdiv3 = document.getElementById("ad_creative_expand_btn_1");
|
|
if (bigbannerdiv3) bigbannerdiv3.parentNode.removeChild(bigbannerdiv3);
|
|
|
|
//Kill promoted videos in search
|
|
var promoted = document.getElementsByClassName("promoted-videos");
|
|
var i = 0, length = promoted.length;
|
|
while (i < length)
|
|
if (promoted[i]) promoted[i].parentNode.removeChild(promoted[i]); else i++;
|
|
}
|
|
|
|
document.addEventListener('DOMContentLoaded', InitListeners, false);
|
|
|
|
//Inline scripts modification
|
|
window.opera.addEventListener('BeforeScript', function(userJSEvent){
|
|
var tofilter = userJSEvent.element.text;
|
|
tofilter.match(/flashvars=\\\"(.*?)\\\"/gim);
|
|
var fvars = RegExp.$1;
|
|
|
|
if (tofilter.indexOf('flashvars=\\"') > -1 &
|
|
(tofilter.indexOf("ad_host") > -1 ||
|
|
tofilter.indexOf("ad_tag") > -1 ||
|
|
tofilter.indexOf("ad_eurl") > -1 ||
|
|
tofilter.indexOf("ad2_") > -1 ||
|
|
tofilter.indexOf("ad3_") > -1 ||
|
|
tofilter.indexOf("use_meta_ad_player") > -1 ||
|
|
tofilter.indexOf("cta_xml") > -1))
|
|
{
|
|
var fvarsnew = fvars.replace(/[\&\?\;](afv_ad_|ad_|ad2_|ad3_|cta_|infringe|invideo|watermark)(?!policy)([^=]*)?=(.*?)(\\u0026amp|\&|amp)/gi, "") + "&cta=false&invideo=false&enablejsapi=1";
|
|
fvarsnew = fvarsnew.replace(/(^[\&\?]*)|([\&\?]*$)/gm, "");
|
|
tofilter = tofilter.replace(fvars, fvarsnew);
|
|
}
|
|
|
|
if (tofilter.indexOf("'FLASH_UPGRADE'") > -1 ||
|
|
tofilter.indexOf("'PLAYER_CONFIG'") > -1 ||
|
|
tofilter.indexOf("'PYV_AD_") > -1 ||
|
|
tofilter.indexOf("afcAdCall") > -1 ||
|
|
tofilter.indexOf("afcCallback") > -1 ||
|
|
tofilter.indexOf("'google_ad") > -1)
|
|
{
|
|
var wrong = new Array(/"invideo": true/gi, /"cta": true/gi, /PYV_AD_/gi, /google_ad_/gi, /afcCallback();/gi, /([\"\'])(afv_ad_|ad_|ad2_|ad3_|cta_|infringe|watermark)(?!policy).*?([\"\'])/gi);
|
|
var right = new Array('"invideo": false', '"cta": false', 'DUMMY_', 'dummy_', '', '$1dummy$3');
|
|
for (var i = 0; i < wrong.length; i++) {
|
|
tofilter = tofilter.replace(wrong[i], right[i]);
|
|
}
|
|
}
|
|
|
|
userJSEvent.element.text = tofilter;
|
|
}, false);
|
|
|
|
//External scripts blocking
|
|
window.opera.addEventListener('BeforeExternalScript', function(userJSEvent){
|
|
var toblock = userJSEvent.element.src;
|
|
if (toblock.indexOf("pagead") > -1 ||
|
|
toblock.indexOf("ad-emea") > -1 ||
|
|
toblock.indexOf("AdManager") > -1 ||
|
|
toblock.indexOf("fwmrm") > -1 ||
|
|
toblock.indexOf("2mdn") > -1 ||
|
|
toblock.indexOf("ads") > -1 ||
|
|
toblock.indexOf("googletagservices") > -1)
|
|
{
|
|
userJSEvent.stopPropagation();
|
|
userJSEvent.preventDefault();
|
|
}
|
|
}, false);
|
|
|
|
})();
|