autopatrol
3,554
edits
mNo edit summary |
(Testing) |
||
Line 1: | Line 1: | ||
// ==UserScript== | |||
// @name Disable Text Ads | |||
// @namespace http://www.fibble.org/ | |||
// @description Disables inline text ads from Vibrant Media (IntelliTXT), AdBrite, Infolicious (lingoSpot), Kontera, Linkworth, EchoTopic, Targetpoint (defunct?), MediaText (defunct), ResultLinks, Chitika and Infolinks. | |||
// @version 9.0 | |||
// @include http://* | |||
// ==/UserScript== | |||
var disableTextAds = { | |||
blockAds: function(elt) { | |||
var target = elt; | |||
var childNode; | |||
switch(elt.nodeName.toLowerCase()) { | |||
// EchoTopic and ResultLinks wrap their inserted links in a <nobr> tag. | |||
case 'nobr': | |||
if (elt.firstChild.getAttribute('class') == "tfTextLink") { //EchoTopic | |||
childNode = elt.firstChild.firstChild; | |||
} else if (elt.firstChild.hasAttribute('id') && elt.firstChild.getAttribute('id').search(/RLLINK/) >= 0) { //ResultLinks | |||
childNode = elt.firstChild.firstChild; | |||
} | |||
break; | |||
// AdBrite check | |||
case 'ispan': | |||
if (elt.hasAttribute('id')) { | |||
if (match = elt.getAttribute('id').match(/AdBriteInlineAd_(.*)/i)) { | |||
childNode = document.createTextNode(match[1]); | |||
} | } | ||
}); | } | ||
break; | |||
// Chitika | |||
case 'span': | |||
if (elt.firstChild.nodeName.toLowerCase() == 'a') { | |||
if (elt.getAttribute('class') != null && elt.getAttribute('class').search(/lx-link/) >= 0) { | |||
childNode = elt.firstChild.firstChild; | |||
break; | |||
} | |||
} | |||
// The rest of the networks | |||
case 'a': | |||
var a_class = elt.getAttribute('class'); | |||
switch(a_class) { | |||
// Infolinks | |||
case 'IL_LINK_STYLE': | |||
childNode = elt.firstChild; | |||
break; | |||
// Kontera | |||
case 'kLink': | |||
childNode = disableTextAds.findKonteraText(elt); | |||
break; | |||
} | |||
// IntelliTXT | |||
if (elt.hasAttribute('itxtdid')) { | |||
childNode = elt.firstChild; | |||
break; | |||
} | |||
// Mediatext | |||
if (elt.hasAttribute('c4fadvertpos')) { | |||
childNode = elt.firstChild; | |||
break; | |||
} | |||
// Targetpoint Check | |||
if (elt.hasAttribute('tpi')) { | |||
childNode = elt.firstChild; | |||
break; | |||
} | |||
// Old AdBrite check - not sure if this is still relevant | |||
if (elt.hasAttribute('id')) { | |||
if (match = elt.getAttribute('id').match(/AdBriteInlineAd_(.*)/i)) { | |||
childNode = document.createTextNode(match[1]); | |||
} | |||
break; | |||
} | |||
// Can't be too cautious. | |||
break; | |||
} // case | |||
// Grab the inner text and replace the inserted tag with it | |||
if (childNode) { | |||
target.parentNode.replaceChild(childNode, target); | |||
} | |||
}, | |||
findKonteraText: function(elt) { | |||
// kontera triply-nests the original content: | |||
// <a><font><span>text</span><span>here</span></font></a> | |||
var kTextNodes = document.evaluate("font/span[@class='kLink']/text()", elt, null, XPathResult.ORDERED_NODE_ITERATOR_TYPE, null); | |||
var kTextNode = kTextNodes.iterateNext(); | |||
var content = ''; | |||
while(kTextNode) { | |||
content += kTextNode.data + ' '; | |||
kTextNode = kTextNodes.iterateNext(); | |||
} | |||
return document.createTextNode(content.substring(0,content.length-1)); | |||
} | |||
}; | |||
document.addEventListener('DOMNodeInserted', function(event) { disableTextAds.blockAds(event.target); }, true); | |||
// Handle the cases that don't trigger our DOMNodeInserted hook. | |||
window.addEventListener("load", function(event) { | |||
// According to LingoSpot, setting this global variable will disable all ads. Doesn't actually see to have any effect. | |||
unsafeWindow.LINGOSPOT_DISABLED = true; | |||
// Thanks to Descriptor for yet another way to block LingoSpot; doesn't on every page, unfortunately. | |||
// Still, it should reduce runtime for pages where it works. | |||
unsafeWindow.tf_maxKeywords = 0; | |||
// Unfortunately, Linkworth has decided to remove their container div, so we're stuck crawling the entire document body. Meh. | |||
var links = document.evaluate("//a[@class='lw_cad_link' or @itxtdid]", document.body, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); | |||
for (var i=0; i<links.snapshotLength; i++) { | |||
var anchor = links.snapshotItem(i); | |||
anchor.parentNode.replaceChild(document.createTextNode(anchor.textContent), anchor); | |||
} | |||
}, false); |