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

// ==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);
})();