背景:瘦身网页是为了节省流量,用google mobile虽然流量省了但网页布局也改变了,所以想如何不改变布局的情况下把无用的信息给屏蔽了。由于网页体积大副增加的罪魁祸首是大量image、js和iframe,有时候有些广告文件名不包含adkey,px也无法判断其是否为广告;又因为有些内容虽然被隐藏了,但里面的图片仍然会被加载,并不省流量。基于这三点考虑,故我想如何编写个规则,把有用的信息留下,无用的元素挡在px之外。
基本思路:头文件判断是否是需要瘦身的网页,并定义变量。倘若网页如下所示:
Code: Select all
<body>
<div id=ad1>广告</div>
<div id=wrap>
<div id=ad2>广告</div>
<div id=content>正文</div>
<div id=ad3>广告</div>
</div>
</body>
那么我们可以对div进行判断来采取措施,规则中我设置了ifslim变量,当px扫描到ad1时,ifslim赋值1,即slim功能打开,从ad1开始全部删除,接着px扫描到wrap,ifslim赋值0,停止删除,接着扫描到ad2,slim功能再打开,接着扫描到content,slim功能关闭,最后扫描到ad3,slim功能打开。归纳下就是,遇到ad1、ad2、ad3时slim打开,遇到wrap、content时slim关闭。我们可以设立个blocklisk,把那些需要slim的网页和和id标志放进去。
这样我们就可以在保留content的同时,把广告全部删除。
规则如下:
Code: Select all
[HTTP headers]
In = TRUE
Out = FALSE
Key = "IF-slim: slim web"
URL = "([^/]+//|)$LST(slim)$SET(FLT=slim)$SET(ifslim=0)$STOP()"
[Patterns]
Name = "===== slim ====="
Active = FALSE
Limit = 256
Match = "^?"
Name = ".+slim div"
Active = FALSE
Multi = TRUE
URL = "$TST(FLT=slim)"
Bounds = "<div [^>]+>"
Limit = 256
Match = "(*\s(id|class)=$AV(\0)*)\1>($TST(adk1=*.$TST(\0).*)$SET(ifslim=1)PrxFail$TST()|"
"$TST(adk2=*.$TST(\0).*)$SET(ifslim=0)|"
"$TST(ifslim=0))"
Replace = "\1 style="display:none !important;">"
Name = ".+slim script in div"
Active = FALSE
URL = "$TST(FLT=slim)"
Bounds = "<(/|)script[^>]+>"
Limit = 256
Match = "$TST(ifslim=0)\1script*"
Replace = "\1script>"
Name = ".+slim stuffs in div 1"
Active = FALSE
URL = "$TST(FLT=slim)"
Bounds = "<(img|iframe|embed)[^>]+>"
Limit = 256
Match = "$TST(ifslim=0)\#src=@AV(\0)\#"
Replace = "\@"
Name = ".+slim release"
Active = FALSE
URL = "$TST(FLT=slim)"
Limit = 256
Match = "^(^</html>)"
Replace = "$SET(FLT=)$SET(ifslim=)$SET(adk1=)$SET(adk2=)"
Code: Select all
*.sina.com.cn/[^/]++/(^index).(htm|html|shtml)$SET(adk1=.wrap.content.)$SET(adk2=.ad1.ad2.ad3.)