【轻知识】chrome扩展开发——不智能过滤广告

先看看效果

  • 设置前
设置前
  • 设置后
设置后
  • 规则


    规则
  • 面板解读

直接看json 就晓得界面功能了。

iframe 轮播广告
.pulllog-box 底部广告
#csdn-toolbar 顶部tabbar
aside 隐藏侧栏就没必要再添加iframe了
{
    "blog.csdn.net":[
        {
            "is_enable":1,
            "rule":"iframe"
        },
        {
            "is_enable":1,
            "rule":".pulllog-box"
        },
        {
            "is_enable":1,
            "rule":"#csdn-toolbar"
        },
        {
            "is_enable":1,
            "rule":"aside"
        }
    ]
}

开发动机

查资料的时候,经常会看到一些广告。会分神。比如:百度右侧广告、CSDN的广告(还是轮播的)等等。

其实我们查资料,固定访问的域名很多时候都是高频的。因为,有自己独立域名的童鞋还是少数(更少的是投广告在自己博客上,比如:阮一峰、廖雪峰 等等)

我们看一些自我比较难的知识点(比如:底层知识)本来就看的慢。轮播广告晃来晃去。心烦,还是双十一促销广告。上一秒思考网络事件模型,下一秒想买个降噪耳机吧。开个玩笑。

拿来主义

我看了这篇文章《【干货】Chrome插件(扩展)开发全攻略》(文末有链接)。作者把自己的作品放了github。

我想快速搞定.....。那么我需要知道插件开发规则(比如:所谓搭建个架子)。比如你要用一个框架写业务。正好兄弟部门有人用过,那么down 他一份。因为我仅仅需要个架子跟一个mvc demo。

于是,我down 了上文文中作者github的demo。

第一版完成

进一步畅想

联网弄个远程规则库?每个人都弄个账号保存自己的规则?这样换电脑就不用再手动了。再增加一些程序员经常用的小工具?

鼠标划区域屏蔽?

..........(省略的想象)........

其实:adblock 扩展就很智能(支持划区域屏蔽)。推荐给大家https://chrome.google.com/webstore/search/adblock?hl=zh-CN

代码

页面加载完根据规则做dom remove

$(function() {
    var u = new URL(location.href);
    host = u.hostname;// 获取host
    // 加载设置
    chrome.storage.sync.get(host, function(data) {
        var eleArr = data[host]; // 获取要删除的元素数组
        if (data[host] != undefined) {
            eleArr.forEach(function(v,k) {
                    console.log(v);
                if (v.is_enable === 1) {
                    $(v.rule).remove();
                }
            })
        }
    });
});

界面操作

var ruleObj = {
    host: '',
    ruleData: [],
    alreadyDiv: $("#already"),
    msg: '操作成功!',
    init: function() {
        var that = this;
        chrome.tabs.getSelected(null, function (tab) {
            var u = new URL(tab.url);
            that.host = u.hostname;// 获取host
            // 因为是异步 所以要放这里边。
            chrome.storage.sync.get(that.host, function(data) {
                 if (data[that.host] != undefined) {
                    var eleArr = data[that.host]; // 获取要删除的元素数组
                    that.ruleData = eleArr;
                    that.render(); // 渲染数据
                 }
            });
        });
    },
    saveData: function() {
        var that = this;
        var obj = {};
        obj[that.host] = that.ruleData;
        chrome.storage.sync.set(obj, function() {
            var statusSpan = $("#status");
            statusSpan.html(that.msg);
            setTimeout(() => {statusSpan.html('');}, 800);
            pageObj.refresh();
        });
    },
    reloadRender: function() {
        this.alreadyDiv.empty();
        this.render();
    },
    render: function() {
        var that = this;
        this.ruleData.forEach(function(v,k) {
            var statusDesc = v.is_enable == 0 ? "启用": "禁用";
            that.alreadyDiv.append("<p><input type='text' id='rule"+k+"' value='"+v.rule+"' /><button class='update' data-index='"+k+"'>更新</button><button class='delete' data-index='"+k+"'>删除</button><button class='is_enable' data-index='"+k+"'>"+statusDesc+"</button></p>");
        })
    }
};
var pageObj = {
    refresh: function() {
        chrome.tabs.getSelected(null, function(tab) {
          var code = 'window.location.reload();';
          chrome.tabs.executeScript(tab.id, {code: code});
        });
    }
}

ruleObj.init();
ruleObj.render();

$("#already").on("click", ".update", e => {
    var index = $(e.target).data("index");
    var rule = $("#rule"+index).val();
    if (rule.length == 0) {
        return false;
    }
    ruleObj.ruleData[index].rule = rule;
    ruleObj.saveData(); 

})
$("#already").on("click", ".delete", e => {
    var index = $(e.target).data("index");
    ruleObj.ruleData.splice(index, 1);
    ruleObj.reloadRender()
    ruleObj.saveData();
})

$("#already").on("click", ".is_enable", e => {
    var index = $(e.target).data("index");
    var rule = $("#rule"+index).val();
    if (rule.length == 0) {
        return false;
    }
    ruleObj.ruleData[index].is_enable = ruleObj.ruleData[index].is_enable ? 0 : 1;
    ruleObj.saveData(); 
})

$("#add").click(e => {
    var rule = $("#rule").val();
    if (rule.length == 0) {
        return false;
    }
    $("#rule").val('');
    var ruleJson = {
        rule: rule,
        is_enable: 1
    }
    ruleObj.ruleData.push(ruleJson);
    ruleObj.reloadRender();
    ruleObj.saveData()
});

demo下载 https://github.com/yanshinian/adblock-chrome

插件icon

icon

参考资料:

*《【干货】Chrome插件(扩展)开发全攻略》http://www.cnblogs.com/liuxianan/p/chrome-plugin-develop.html#%E5%BC%80%E5%8F%91%E4%B8%8E%E8%B0%83%E8%AF%95

*《Chrome插件(Extensions)开发攻略》 https://www.cnblogs.com/guogangj/p/3235703.html

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 文 | 晨妤儿 喜欢你 心跳的见到你想笑 心里住着你的我,你喜欢我吗
    晨妤儿阅读 548评论 0 5
  • 我们每个人天生都有表达的欲望,这就是写作的动力。也就是说,我们每个人身上都有作家的潜质。只要你愿意写作、能够写作、...
    周公子聊娱乐阅读 11,067评论 98 292
  • 也了个后半晌,天上冷不丁打了个响雷,不一会就开始掉点了,但天还是很闷。我穿着踏了板子去公园坐了一会儿,瞅着散步的好...
    雷雷喜金毛阅读 1,118评论 0 0
  • 一切不顺,只因你的想法不够提前,行动力不够强。只因你弱的可以,弱的可以找到无数个别人去替代你完成工作。弱不可怕,可...
    凌轩子鱼阅读 1,924评论 0 0