firefox扩展实践

502阅读 0评论2009-02-04 zhangsanji
分类:

我的电脑已经用了快3年了,1.7单核,好慢。
网页上好多banner,对联等广告,里面都是嵌了狂耗cpu的flash,决定去掉它们。
前提:假设这些banner等广告位在div里面,div有id(考察了自己经常上的几个站点好像都这样的)
例如:spaces.live.com那个banner的id就是AdContainer;cn.reuters.com那个banner的id是banner,其他位置多用类似advert_12345的形式的id。
主要的js很简单,这个firefox的扩展也是只改了一下文档里的helloworld。
 

window.setInterval(function() {
    var getElementsByTagNameIdRegExp = function(tagname, idregexp) {
        var rt = [];
        var objs = content.document.getElementsByTagName(tagname);
        for(var j = 0; j < objs.length; j++) {
            if(typeof(objs[j].id) != 'undefined' && idregexp.test(objs[j].id)) {
                rt.push(objs[j]);
            }
        }
        return rt;
    };
    //delelte ad from webpages

    try {
        var ods = [];
        //spaces.live.com's banner ad

        if(/spaces.live.com/.test(content.window.location.href)) {
            var o = content.document.getElementById('AdContainer');
            if(o) {
                ods.push(o);
            }
        }
        //donews.com banner ad

        if(/donews.com/.test(content.window.location.href)) {
            var o = content.document.getElementById('TopAds');
            if(o) {
                ods.push(o);
            }
            var re = new RegExp('p[0-9]');
            var rts = getElementsByTagNameIdRegExp('IFRAME', re);
            ods = ods.concat(rts);
        }
        //reuters.com's banner ad

        else if(/reuters.com/.test(content.window.location.href)) {
            var o = content.document.getElementById('banner');
            if(o) {
                ods.push(o);
            }
            var re = new RegExp('advert_[0-9]');
            var rts = getElementsByTagNameIdRegExp('DIV', re);
            ods = ods.concat(rts);
        }
        //others sites...

        //now deleting

        for(var i = 0; i < ods.length; i++) {
            ods[i].parentNode.removeChild(ods[i]);
        }
    }
    catch(e) {}
}, 500);

上一篇:gcc语言标准的使用你知道多少?
下一篇:php里include,include_once和requie,require_once的区别