JavaScript函数劫持过滤页内广告
终于又开始写Blog了。
摸了一下午模版,发现这个Blog的自由度还是相当大的,而且还支持语法加亮,美中不足的是回复框下面居然有一系列广告。于是想了个办法进行页面元素过滤,其原理就是劫持 document.write() 函数,对输出的内容进行过滤,只要是包含指定字符串的,一律封杀。
效果还比较理想,看图:
![](https://www.cnblogs.com/images/cnblogs_com/bits/PaperImgs/比较干净的页脚.jpg)
代码也很短,配合页首、页脚两段JS脚本,就可以完成任务。
页首Html代码:
<script type="text/javascript">
/* 广告过滤 */
var my_write = document.write;
document.write = function(str) {
if (str.indexOf(".yeshj.com") >= 0) {
// 过滤包含 .yeshj.com 的输出
}else if (str.indexOf("/pagead/") >= 0) {
// 过滤 google ad: /pagead/
}else {
// 正常流程
my_write(str);
}
}
</script>
/* 广告过滤 */
var my_write = document.write;
document.write = function(str) {
if (str.indexOf(".yeshj.com") >= 0) {
// 过滤包含 .yeshj.com 的输出
}else if (str.indexOf("/pagead/") >= 0) {
// 过滤 google ad: /pagead/
}else {
// 正常流程
my_write(str);
}
}
</script>
页脚Html代码:
<script type="text/javascript">
function CleanDIV() {
try {
document.getElementById("relative_posts").innerHTML="";
document.getElementById("relative_posts").style.display = "none";
document.getElementById("div_a4_ads").innerHTML="";
document.getElementById("div_a4_ads").style.display = "none";
} catch(e) {
}
}
CleanDIV();
</script>
function CleanDIV() {
try {
document.getElementById("relative_posts").innerHTML="";
document.getElementById("relative_posts").style.display = "none";
document.getElementById("div_a4_ads").innerHTML="";
document.getElementById("div_a4_ads").style.display = "none";
} catch(e) {
}
}
CleanDIV();
</script>
最后再向CSS里加入这个,屏蔽两个有ClassName的DIV:
/*页面底部广告过滤*/
.CommentBoxNav {
display:none;
}
.itnews {
display:none;
}
.CommentBoxNav {
display:none;
}
.itnews {
display:none;
}
重点在于页首脚本里的 document.write = function(str) {},这句将 write() 函数给替换了,之后想怎么处理都是自由发挥了,比如用正则表达式来匹配、替换关键字...
OK,自己看效果吧。
另外,关于JS函数劫持,想了解更多的可以去这里看看:http://www.xfocus.net/articles/200712/963.html