[转帖]让你的opera没有浮动广告,把真正的清爽带给你

上网、浏览、聊天、下载等
回复
头像
smallwolf
帖子: 195
注册时间: 2005-09-14 21:39

[转帖]让你的opera没有浮动广告,把真正的清爽带给你

#1

帖子 smallwolf » 2005-09-21 0:03

原文链接:
http://my.opera.com/chinese/forums/topic.dml?id=98685

作者:niltsh
版权归作者所有,本文系转载,如果作者认为此帖侵犯了作者版权,请email版主,将此帖删除

原文:

脚本原文:

代码: 全选

var keyadex = new Array(/[^oe]ad[^d]/i, /cn\.yimg\.com/i, /icast/i);


var keyadin = new Array(/[^\/]\/ad[^dj]/i, /[a-df-np-z]ad[^a-z=\/-]/i, /[^a-z\/,\s]ad[^dj]/i);




var blist = new Array();




var wlist = new Array(/mail\.yahoo/i);




var dbg = 0;


function IsAD(str, flag)


{


  var keyad;


  if ( flag )


    keyad = keyadex ;


  else 


    keyad = keyadin ;




  for (var i = 0; i < keyad.length; i++) {


    if (keyad.test(str) == true)


    return 1;


  }


  return 0;


}




function filterex(e)


{


  for (var i = 0; i < blist.length; i++) {


    if (blist.test(location.host) == true) {


      e.preventDefault();


      return;


    }


  }


  


  var addr=e.element.getAttribute("src");


  if (IsAD(addr, 1)){


    e.preventDefault();


    if (dbg) {


      alert("banex"+addr);


      return;


    }


  }


  if (dbg)


    alert("threx"+addr);


}




function filterin(e)


{


  for (var i = 0; i < wlist.length; i++) {


    if (wlist.test(location.host) == true)


      return;


  }




  var tsc = e.element.text; 


  if ( IsAD(tsc, 0) ) {


    e.preventDefault();


    if (dbg) {


      alert("banin"+tsc);


      return;


    }


  }


  if (dbg)


    alert("thrin "+tsc);


}




window.opera.addEventListener( 'BeforeExternalScript', filterex, false); 


window.opera.addEventListener( 'BeforeScript', filterin, false); 
2.源码说明
有两种event驱动,一种是脚本的源代码,另外一种是外部脚本的url,都会引发event
也就是说,对于本身网页内脚本,只需要通过filterin的过滤;但是对于有src属性的外部脚本,会首先考察src(filterex函数过滤),如果url的地址通过的话,opera就会得到这个脚本的源代码,这个时候就还要再进行源代码的过滤。
过滤就是靠关键字,都是用正则表达,分别保存在keyadex和keyadin中。
另外,加入黑名单和白名单。
对于黑名单,只用来控制外部脚本,对于来自黑名单的外部脚本,一律无视,全部打倒。
对于白名单,只用来控制内部脚本,对于来自白名单的外部脚本,一律无视,全部通过。这个用来对付那种把广告脚本和网页内容脚本写一块的网站,比如mail.yahoo.com
变量 var dbg是用来控制是否产生输出,=1的话,哪个脚本是否通过,是否拦截都能看到了。
3.配置指导
ctrl+f12→高级→内容→java脚本选项→用户脚本指定脚本所在目录就可以了
4.使用结果及感想
效果还是明显的,能拦截到很多广告脚本,
但是 过滤js的脚本 毕竟只是一个结构上的filter,对于细节的精雕细琢还是不行,

不过如果是按照opera所说的,那么过滤外部脚本应该还是对浏览速度有所帮助的,因为filter是发生在脚本下载之前。

希望达人体意见,因为鄙人学javascript还不到一周,很多东西都不知道。

现在顺便先问一个,DOM2里面load事件是发生在load已经完成将要生效的时候,有没有哪个event是发生在load之前的?
头像
smallwolf
帖子: 195
注册时间: 2005-09-14 21:39

#2

帖子 smallwolf » 2005-09-21 0:08

我还没来得及实验呢

不过看原理 觉得应该好用

大家来试试opera吧

新的8.5已经免费,现在又可以实现很多ff的功能

如果那个脚本还有可以进步的地方,咱们论坛的高手可以也研究一下啊

还有个网站:

http://userjs.org 好像是专门研究opera的userjs的

不错的 东西 大家看看
头像
smallwolf
帖子: 195
注册时间: 2005-09-14 21:39

#3

帖子 smallwolf » 2005-09-21 0:15

还有另外一个方法,就是css过滤

我就不转贴了 给个网址 大家看看

http://nontroppo.org/wiki/BlockAdvertisements
头像
smallwolf
帖子: 195
注册时间: 2005-09-14 21:39

#4

帖子 smallwolf » 2005-09-21 0:22

另外说一下他的正则表达式的规则,便于大家自己扩展

拿咱们论坛来说:forum.ubuntu.org.cn

整个屏蔽的网址都写在 //i中的/和/中

这样如果要屏蔽论坛的话 就是这样:

/forum\.ubuntu\.org\.cn/i

很简单吧 这里的\.类似于c中的转义字符,就是说要把它特殊标记出来,便于识别

这样你就可以把很多自己遇到的浮动广告加进去了,其实这个本身已经可以过滤很多了,不过为以防万一,还是会自己扩展比较好

好累啊 我去睡觉了

希望对大家都点用
aminiboy
帖子: 10
注册时间: 2005-09-26 23:54

#5

帖子 aminiboy » 2005-09-28 18:50

一直用Opera,太喜欢了,这东西看来不错,先收藏了。
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#6

帖子 eexpress » 2005-09-28 23:28

这个收藏?现在8.5都没有广告啊。
● 鸣学
头像
smallwolf
帖子: 195
注册时间: 2005-09-14 21:39

#7

帖子 smallwolf » 2005-09-29 9:41

呵呵 eexpress兄误会了

是指让opera在浏览网页时,不显示那些网页里的烦人的浮动广告,不是opera的自己的广告的 :)
yongyi
帖子: 3025
注册时间: 2005-05-07 23:57
联系:

#8

帖子 yongyi » 2005-09-29 12:12

eexpress 是快枪手 :P
独自看一看大海
总想起身边走在路上的朋友
Lenovo E290-420[Celeron-M420/256M/60G/Intel GMA950]
头像
eexpress
帖子: 58428
注册时间: 2005-08-14 21:55
来自: 长沙

#9

帖子 eexpress » 2005-09-29 13:14

哦。有时候是快了点。不过说道广告,确实看过有opera的一个wiki网站上有配置方法。
● 鸣学
dioscuri
帖子: 90
注册时间: 2008-10-21 13:19

Re: [转帖]让你的opera没有浮动广告,把真正的清爽带给你

#10

帖子 dioscuri » 2009-08-22 23:48

opera的广告过滤还是弱了些。许多设置需要自己动手来,像css或是js过滤.在win下还有些工具可以使用,而linux下只能一个网站一个来弄。
头像
hcym
帖子: 15634
注册时间: 2007-05-06 2:46

Re: [转帖]让你的opera没有浮动广告,把真正的清爽带给你

#11

帖子 hcym » 2009-08-22 23:58

老天爷,05年的坟头

不是有现成的规则包嘛
:em20
回复