// ==UserScript== // @name Block external iframes // @author Lex1 // @version 1.0 // @description Block external iframes (usually used for js-ads). // @include http://* // @exclude http://example.com/* // ==/UserScript== if(parent != self)parent.postMessage('frames-updated', '*'); window.addEventListener('message', function(e){ var getTLD = function(domain, full){ if(!domain)return ''; var r = domain.match(/^((?:\d{1,3}\.){3})\d{1,3}$/); if(r)return r[1] + '0'; var a = domain.split('.'), l = a.length; if(l < 2)return domain; return full ? a[l - 2] + '.' + a[l - 1] : a[(l > 2 && /^(co|com|net|org|edu|gov|mil|int)$/i.test(a[l - 2])) ? l - 3 : l - 2]; }; if(e.data == 'frames-updated'){ var h = location.hostname, n = !/\.(com|[a-z]{2})$/.test(h), f = document.getElementsByTagName('iframe'); for(var i = f.length; i--;){ if(getTLD(/^https?:\/\/([^\/]+@)?([^:\/]+)/i.test(f[i].src) ? RegExp.$2 : h, n) != getTLD(h, n)){ if(window.opera)window.opera.postError('On <' + h + '> blocked external iframe: ' + f[i].src); f[i].parentNode.removeChild(f[i]); } } } }, false); |