世界之窗3的广告过滤规则 2013.5.31更新

来源:互联网 发布:恢复断开的网络驱动器 编辑:程序博客网 时间:2024/05/29 13:08

世界之窗3升级后主站论坛恢复后,更新了一下规则!


2013.5.31更新:优化遍历DOM逻辑,整个脚本代码不足50行!

终于做了个在线更新,不用在网盘上做更新了!!大笑
在世界之窗3中进我的帖子点击那个绿色图标: 世界之窗论坛(汗!不支持站外直接在线添加规则)

这里发发世界之窗3牢骚三点:
当网页内容(最典型是脚本文件)被网址黑名单(<urlrule>)屏蔽后,广告过滤插件并未对主程序返回调用,主程序也就一直等待调用返回,而导致界面显示一直在访问;
第二点诟病之处,就是网址黑名单功能并不稳定,有时对一些地址的过滤并不起作用。
最后一点还是广告过滤的,其易用性还有待提高,应提供一个和火狐ABP类似的直观过滤项查看界面;过滤规则的维护性不高,特别是网址黑名单~内容一多就混乱不好维护。

更新记录:

2012-11-25 最近学JQuery,真强大!!用上了~去华军软件园的下载验证!这里做个Mark: 调用JQuery的方法得加上小括号,不然返回的可是方法对象!

这次更新,属于重大更新!!!!!已经解决和迅雷冲突的BUG!!

增加几个网站的处理,如2ccc.com的45秒等待真令人恼火!!取消它,不过还是有提示!


2012-06-26 解决诸多在线邮和JS广告过滤 规则的冲突

2012-06-19 重大更新,优化newkillAd.js:修正浮动判断依据;修正网址判断逻辑。查杀和执行效率都提高很多,也少了很多误杀!请即更新!!【只贴到代码框了】。
       更新网易及其视频站点的过滤规则,完美过滤其二个域名v.163.com,163.letv.com的广告,不会出现之前有的播放不了,有些广告又过滤不掉的情形!
加入网址黑名单,个人建议:网址黑名单 只保留我的 gsf url、xwhyc url、絮的通用url 规则三项(E版的更新不太及时)。象我的Xml规则文件就38KB大小

      启用CSS定义网站样式和过滤网页显示元素,58小说网、闪舞小说网 、556677文字小说网三个站点都采用注入CSS进行定义及过滤,原有的元素过滤并未删除只是禁用。相关CSS注入技术、更多细节请访问世界之窗论坛



11-10  添加了几个广告联盟的处理,和讯网广告!

11-25  整理过滤规则,删除一些重复作用的规则;添加了浮动广告处理killAd.js,可选!

11-29  浮动广告处理killAd.js修正完成,做了基本测试;增加了对QQ网站的广告处理。此次更新,规则默认开启JS。

11-30  花了一晚测试浮动广告处理killAd.js,解决:空框架问题、误删正常内容框架。及修改若干Bug。测试:FireFox 8,IE 8,网站:和讯期货实时行情、万卷书库、中关村在线、广西政府网、QQ、www.qzwap.com等。你可直接用本规则到中关村在线测试,可正常删除其没被过滤的浮动广告!

今天二次更新,修正滚动事件的取消Bug,在太平洋电脑网测试通过!!

12- 2  增加对网易评论的免过滤处理,新增太平洋电脑网的规则;修正脚本的一个Bug!

12-11  killAd.js脚本用onreadystatechange代替onload事件

2012元旦 增加对HTML5的支持,即增加对Video标签的处理。  killAd.js更新,精简代码到只有50行,只处理浮动广告,并进行类封装【killAd.js更稳定些】。

重写了JS,文件名newkillAd.js该JS能比较智能的识别广告并删除,效率也高些。对广告容忍性差点,机器配置低的朋友推荐使用!newkillAd.js对产生广告的JS标签进行监控处理,但该JS受出错网页的影响也大,有时网页出错时不能正确处理广告。

2012.01.05  newkillAd.js用正则表达式判断广告媒体;增加对出错网页的广告过滤处理;整个JS用类封装。已经完成测试:和讯期货实时行情【原来误删行情数据已解决】、万卷书库、中关村在线、广西政府网、QQ、www.qzwap.com等。网页出错的情形下JS照常过滤广告。推荐使用newkillAd.js进行过滤!!!!!!!

2012.01.18 春节前更新一次 删除并更新一些过时、不合相应网站变化的规则,将絮的通用元素规则删除了,太复杂、耗时、太多误删了;修正JS文件中的一处小错误。


刚刚发现CSDN的代码框支持复制了,内牛满面中.......这么简单的功能现在才搞出来

(对弹窗广告JS还是没办法啊!!TW3对弹窗也是挺乏力的,个人建议用防火墙如Nod32的HTTP防火墙,将ABP中带Third-Part的网址列表【即广告联盟网址】全加入到防火墙的黑名单中!嘿嘿,这样做的话,配合newkillAd.js基本上可杜绝广告,也无须再怎么更新规则了)


另外一点 要说的是:浮动广告处理killAd.js可直接用于世界之窗2,有个叫Killad脚本插件,直接替换其中的内容即可,可把事件处理删除,只执行onBodyLoad(),最后设置插件自动运行。2版中的元素管理器捕获网页富媒体文件还是很好用的!!我经常用!!


关于脚本还有一点要说,如果感觉脚本的执行对网页的装入速度没影响【说明:脚本是本地执行,对网速肯定是没影响】,那基本上无须再更新过滤规则了,甚至可把过滤规则逐步试着删除!请用IE6、7、9的朋友帮忙测试一下脚本,有问题请到评论反馈!!谢谢


(BS一下微软,在IE下JS不好调试不说,在FF下执行一点问题都没,在IE下就一次一个结果,如:removeChild这条DOM,感觉IE有一套克隆DOM!让我想刚做IT时用VB也是这情形,让人发狂!!以后可能长期不更新规则了,改用FF和Chrome)


关于浮动广告处理killAd.js脚本有点遗憾的是:IE的setCapture( )只能捕获鼠标事件,不像W3c标准的captureEvents( )可捕获onload事件,不然脚本可精减到十几二十行!关于这个思路哪位脚本高手有好的建议可以提一提!

滚动事件肯定是不能指望,对速度的影响太大;再则有些网页一页不用滚动的!


        这几天没事翻翻正则表达式,本着活学活用的精神,顺便学了世界之窗3的广告过滤规则,加之没事喜欢看看小说,写了几条规则。

 世界之窗3被收购,它的网站已经不可在线更新过滤规则的,这么好一款软件被360了,可惜了!!

现把过滤规则放上来,有需要的朋友可以用用!集成了xwhyc、絮和E(TW3官方)规则,并稍作修增,自己增加了一条通用元素过滤规则专门处理广告脚本,可处理绝大多数脚本广告。


很佩服凤凰工作室,一二个人就写出了这么好一款软件!!

 

(记个事,58小说网打开后总处于访问状态,一开始总不明所以,明明打开了网页~标签还转个不停,每次打开一个页面后都还得按一下ESC键,怪别扭的!!可将规则文件中的58小说网的规则暂时删除体验一下微笑后来将其脚本广告禁了,终于世界清静了!)

 

不学过滤不知道,一学吓一跳啊,仔细一看网页源码,很多网站都是一大堆连接其它站点的广告:图片,Flash等,消耗系统资源不说,打开速度也慢,占用本就不多的带宽!!实在可恶啊!!!!

 

<enable><![CDATA[0]]></enable> 禁用其下过滤规则

<enable><![CDATA[1]]></enable> 启用其下过滤规则


TW3的广告过滤有一个优点:加载HTML前滤过处理,无须下载广告图片Flash等。但少个ADBlock Plus的Third-Part来禁用非本页面地址的广告。

ABP的Third-Part/first-Part,CSS选择器强大啊,这里Mark一下:

# 是CSS的ID选择符

> 是子元素选择符

 . 类选择符

+ 紧接的兄弟选择符
~ 指定元素后面的同级选择符

 {}  属性选择符


举例一个:

TW3中 (?<=<span id=ms_1>.+?;)<a href.+?</font></a>正则表达式用于过滤紧挨着span的 ID为ms_1的A标签,复杂吧【其实可在TW3中注入CSS实现CSS方式的过滤,详见本页前面的论坛帖子链接】

在ABP中用58xs.com##span#ms_1 + a就搞定了,哎

而且ABP中的规则更易于维护!!


有兴趣交流的正则表达式和规则过滤的朋友可留个脚印!

newkillAd.js查杀广告比较严格,如果觉得配置不错,宽带足就用killAd.js吧,浮动广告比较讨厌!! 

 

/********************************************************************************2012-01-05版权所有,转载请注明出处:http://blog.csdn.net/king_xing,欢迎反馈问题!文件名:killAd.js功能说明将该JS文件加入网页中可查杀大多数浮动广告!! ********************************************************************************/var KillAd = function () {var cnstMedia;function enumNodeTree(el) {for (var i = 0; i < 5; i++) {if (el.getElementsByTagName(cnstMedia[i]).length > 0)return true;}return false;}function getStyle(elem, styleName) {if (elem.style[styleName])return elem.style[styleName];else if (elem.currentStyle)return elem.currentStyle[styleName];}function scan() {var i,x,c,elStyle;c = document.getElementsByTagName("div");cnstMedia = ["IFRAME", "IMG", "OBJECT", "EMBED", "VIDEO"];for (i = c.length - 1; i >= 0; i--) {x = c[i];if (!x)continue;elStyle = getStyle(x, "position");if ((elStyle === "fixed" || elStyle === "absolute") && enumNodeTree(x)) {elStyle = getStyle(x.parentElement, "position");if (elStyle === "fixed" || elStyle === "absolute")x = x.parentElement;x.parentNode.removeChild(x);}}cnstMedia = null;}function onBodyLoad() {var s = document.readyState;if (s !== "loading")scan();if (s === "loaded" || s === "complete")document.detachEvent("onreadystatechange", onBodyLoad);}function onBodyScroll() {window.detachEvent("onscroll", onBodyScroll);setTimeout(scan(), 200);}document.attachEvent("onreadystatechange", onBodyLoad);window.attachEvent("onscroll", onBodyScroll);}new KillAd();


newkillAd.js一开始的时候放Html文本最后的,但遇到网页出错的情况,不能正确处理。也试过script标签的defer属性,但在TW3下,很多网页会处于一直加载状态,使JS一直得不到执行!也试过定时器,但定时的时间不好处理,跟硬件和网速的关系太大了!

用<attachhtml>和defer一样的延迟效果,但方便点。可用于指定站点执行脚本,如自定义站点样式!如下:
 <attachhtml>
  <![CDATA[<script type="text/javascript" src="file:///U:/TheWorld3/newkillAd.js"></script>]]>
 </attachhtml> 

/********************************************************************************版权所有,转载请注明出处:http://blog.csdn.net/king_xing,欢迎反馈问题!2012-06-18文件名:newkillAd.js功能说明将该JS文件加入网页中可查杀大多数非弹窗广告!!有些动态生成的网页元素可能查询不到,而导致查杀失败 ********************************************************************************/(function () {var urlRegp = /^(?:[a-z]+:\/{2})?(?:\w+\.)+[a-z]+\//,urlLoc = window.location.hostname;urlLoc = urlLoc.substring(urlLoc.indexOf(".")); //句点开头if (urlLoc.lastIndexOf(".") === 0)urlLoc = window.location.hostname;urlLoc = urlLoc.toLowerCase();function hasAdLink(o) {var x = o.parentElement;if (x.tagName !== "A") {var c = x.getElementsByTagName("a");if (c && c.length === 1)//&& c[0].scrollHeight === o.scrollHeight &&//c[0].scrollWidth === o.scrollWidth)x = c[0];elsereturn false;}return isAdURL(x.href);}function isAdURL(x) {var s = x.toLowerCase().match(urlRegp); //提取出hostnamereturn s && (s[0].indexOf(urlLoc) === -1);}function getStyle(elem, styleName) {if (elem.style[styleName])return elem.style[styleName];else if (elem.currentStyle)return elem.currentStyle[styleName];}//var dbg;function isFloatLay(el) {var x = el.offsetParent;//if (!x && getStyle(el, "display") !== "none") return false;//return !x.offsetParent || x.tagName === "BODY";//dbg = x && x.tagName === "HTML";//天极网http://dc.yesky.com/45/32258045.shtml ,这广告太诡异了:明明删除动作执行了还存在、和傲游中看到的网页结构也不一样! 都TMD是IE的错:操,每个JS程序都执行二遍以上//if (el.id="AC_TR86_2386") (x) ? alert(x.tagName+" style: "+getStyle(x, "1display")) : alert("null");//if (!x) alert(el.tagName + " ;html, run in isFloatLay(), id: " + el.id);//if (!x) return true;// || (x.tagName === "BODY");return (!x) || (x.tagName === "BODY"); // || (x.tagName === "BODY")|| (x.tagName === "HTML")|| (getStyle(el, "display") === "none") || (getStyle(el, "z-index") == -1);}function testStyle(o) {var s = getStyle(o, "position");return (s === "fixed" || s === "absolute");}function scan(el) {var i, j, k, c, x, b, bo, s,cnstMedia = ["iframe", "img", "object", "embed", "video"]; //video是Html5标签bo = document.body;for (i = 0; i < 5; i++) {c = el.getElementsByTagName(cnstMedia[i]);for (j = c.length - 1; j >= 0; j--) {x = c[j];if (!x)continue;//如果只处理浮动广告,注释下面这句b = (i === 0) ? (x.src && isAdURL(x.src)) : hasAdLink(x);if (x.offsetParent) { //可见与否~如被其它层遮挡住了//进行浮动判断:网页DOM向上层回溯while (x !== bo) {if ((x.tagName === "DIV" || x.tagName === "SPAN") && testStyle(x)) {while (testStyle(x.parentElement)) {//alert(x.tagName +"  src: "+ x.src);x = x.parentElement;}if (isFloatLay(x)) { //css, offsetParent动态定位//s = x.tagName + " ;del id: " + x.id + " ; It's offsetParent: ";//(x.offsetParent) ? s = s + x.offsetParent.tagName : s = s + "null";//alert(s);x.parentNode.removeChild(x); //x.style.display = "none";//x.visable = false;}//if (dbg) alert(x.tagName + ",last ;html, id " + x.id);break;}x = x.parentElement;}}if (b && c[j])c[j].parentNode.removeChild(c[j]); //只想处理浮动广告,注释这句}}}function onBodyLoad() {var s = document.readyState;scan(document);if (s === "loaded" || s === "complete") {document.detachEvent("onreadystatechange", onBodyLoad);}}function onBodyScroll() {window.detachEvent("onscroll", onBodyScroll);setTimeout(scan(document), 200);}//扫描脚本并设置其事件function scanScript() {var c, i, me;c = document.getElementsByTagName("script");me = document.getElementById("jsKillAD");for (i = c.length - 1; i >= 0; i--) {if (c[i].readyState !== "complete" &&//c[i].readyState !== "loaded" &&c[i] !== me) {c[i].attachEvent("onreadystatechange", onADScript);}}}function onADScript() {var x,el = event.srcElement;x = el.parentElement;(!x || x.tagName === "HEAD") ? scan(document) : scan(x);if (el.readyState === "complete" || el.readyState === "loaded") //interactive防止下载媒体内容el.detachEvent("onreadystatechange", onADScript);}//if (window.top === window.self){//不在静态子框架中执行document.attachEvent("onreadystatechange", onBodyLoad);window.attachEvent("onscroll", onBodyScroll);setTimeout(scanScript, 10);setTimeout(scan(document), 90);//}})();

2013-5-31版本

(function () {function getStyle(o, styleName) {return o.style[styleName] || o.currentStyle[styleName];}function testStyle(o) {var s = getStyle(o, "position");return s === "fixed" || s === "absolute";}/*function sameDomain(o) {try {return o.document.body;} catch (e) {return  0;}}*/function isFloatLay(o) {var x = o.offsetParent;return !x || x.tagName === "BODY" || x.tagName === "HTML";}function nodeToElement(node) {if (!node || node.innerHTML) return node;var s, oldId = node.id;s = node.id = "__alFwo8dz_fAo3_N";try {s = node.ownerDocument.getElementById(s);}finally {oldId ? node.id = oldId : node.removeAttribute("id");}return s || node;}function scan(el) {var i, j, c, x,oMedia = ["iframe", "img", "object", "embed", "video"];/*c = el.querySelectorAll ? el.querySelectorAll("div>script") : el.getElementsByTagName("script");for (j = c.length - 1; j >= 0; j--) {x = c[j].parentNode;if (x.childNodes.length === 1)x.parentNode.removeChild(x);}*/for (i = 0; i < 5; i++) {c = el.getElementsByTagName(oMedia[i]);for (j = c.length - 1; j >= 0; j--) {x = c[j];//if (i === 0 && sameDomain(x) ) continue;while (x) {if (isFloatLay(x)) {if (testStyle(x))//要删除的层得同时满足二个条件x.parentNode.removeChild(x);break;}//elsex = nodeToElement(x.offsetParent);}}}}/*//扫描广告脚本function scanADjs(){var c, i, o;c = document.getElementsByTagName("script");for (i=c.length-1;i>=0;i--) {o = c[i];if (o.src && o.readyState !== "complete")o.parentNode.removeChild(o);}}scanADjs();*/scan(document);if (frames) {for (var i = 0; i < frames.length; i++) {try {scan(frames[i].document);} catch (e) {}}}})();



原创粉丝点击