zoukankan      html  css  js  c++  java
  • chrome 扩展屏蔽百度贴吧某些人的发言

    chrome 扩展屏蔽百度贴吧某些人的发言

    我比较喜欢看电影,所以会经常去百度电影票房吧看帖子,但是有些人不知道出于什么目的,在每个帖子中都会发布同样的内容,严重干扰正常的看帖,如果下面这位:


    每个帖子都能看到它,心里很不爽,发条呼吁版主封账号,没有用。
     

    刚好最近看了一点javascript的东西,突然就想做个扩展,屏蔽这种帖子,眼不见为净。

    主要工作原理如下:

    1、用户在设置界面输入想屏蔽的用户ID,通过后台JS脚本存储到本地;

    2、当打开贴吧的帖子时,通过 这句获得用户帖子内容:var lstdiv = document.getElementsByClassName("l_post l_post_bright ");,如果用户ID刚好在被屏蔽的人中,那么把此DIV innerhtml设置为空;

     

    想上传到扩展商店呢,结果发现要5刀。

    屏蔽前

    屏蔽后

    manifest.json

    {
        "manifest_version": 2,
        "name": "贴吧增强",
        "version": "1.0",
        "description": "过滤贴吧某些用户",
        "browser_action":
        {
            "default_icon":
            {
                "19": "images/tieba_offline.png"
            },
            "default_title": "贴吧增强",
            "default_popup": "popup.html"
        },
        "background":
        {
            "page": "background.html"
        },
        "permissions": [
            "tabs",
            "http://www.baidu.com/*",
            "http://tieba.baidu.com/*",
            "http://tb2.bdstatic.com/*",
            "http://static.tieba.baidu.com/*"
        ],
        "options_page": "options.html",
        "content_scripts": 
        [
            {
              "matches": ["http://tieba.baidu.com/p/*"],
              "js": ["content.js"]
            }
        ]
    }
    View Code

    options.html

    <html>
    <head>
        <title>贴吧增强设置</title>
    </head>
    <body>
        <div>
            <hr/>
            <table id="userTable" width="300" frame="box" rules="all">
                <caption>过滤用户</caption>
                <tr>
                    <th>用户名</th><th>操作</th><th>删除</th>
                </tr>
            </table>
            <hr/>
        </div>
            <label>用户名</label>
            <input type="text" id="name" />
            <label>操作</label>
            <select id="operaSelect">
                <option value="屏蔽" selected="true">屏蔽</option>
                <option value="增强">增强</option>
            </select>
            <br/>
            <input type="button" id="onAddUser" value="增加用户"></input>
    
        <hr>
        <label id="saveinfo"></label>
        <script src="options.js"></script>
        </body>
    </html>
    View Code

    options.js

    //初始化设置
    function initSetting()
    {
        var butAdd = document.getElementById("onAddUser");
        butAdd.onclick = onAddUser;
    
        LoadUserName();
    }
    //获取超链接代码字符串
    function getLinkStr(sid,sContent)
    {
        var str="<a href="javascript:void(0)" id="" +sid + "">"+sContent+"</a>";
        return str;
    }
    //onDelete的代理函数
    function onDeleteAgent(name)
    {
        this.onDeleteFunc = function()
        {
            onDelete(name);
        }
    }
    //添加一行信息到表格最后
    function insertTable(name,operation,bInitAdd)
    {
        var table=document.getElementById("userTable");
        var ret = 2;
        if(bInitAdd == undefined || false == bInitAdd)
        {
            ret = AddNewUser(name,operation);
        }
    
        if (1 == ret)
        {
            for(var i = 1; i < table.rows.length;++i)
            {
                var cell1 = table.rows[i].cells[0];
                if(cell1.innerHTML == name)
                {
                    var cell2 = table.rows[i].cells[1];
                    cell2.innerHTML = operation;
                    break;
                }
            }
        }
        else if (2 == ret)
        {
            var row = table.insertRow(table.rows.length);
            var cell1 = row.insertCell(0);
            var cell2 = row.insertCell(1);
            var cell3 = row.insertCell(2);
            cell1.innerHTML = name;
            cell2.innerHTML = operation;
            cell3.innerHTML = getLinkStr("user_"+name,"删除");
    
            var agentFunc = new onDeleteAgent(name);
            var item = document.getElementById("user_"+name);
            item.onclick = agentFunc.onDeleteFunc;
        }
    
    }
    //处理用户点击提交按钮函数
    function onAddUser()
    {
        var name = document.getElementById("name").value;
        var oper = document.getElementById("operaSelect").value;
    
        if(name == "")
        {
            return;
        }
        insertTable(name,oper);
        document.getElementById("name").value = "";
        document.getElementById("name").focus();
    }
    //判断新增用户是否已经存在,如果存在,那么就返回false,否则增加到容器中
    function AddNewUser(name,operation)
    {
        for(var i=0;i<gLstUser.length;++i)
        {
            var item = gLstUser[i];
            if(item["name"] == name)
            {
                if(item["opera"] == operation)
                {
                    return 0;//重复
                }
                else
                {
                    item["opera"] = operation;
                    SaveUserName();
                    return 1;//修改
                }
            }
        }
        var newItem = {};
        newItem["name"]=name;
        newItem["opera"]=operation;
        gLstUser.push(newItem);
        SaveUserName();
        return 2;
    }
    
    //根据用户名删除条目
    function onDelete(name)
    {
        for(var i=0;i<gLstUser.length;++i)
        {
            var item = gLstUser[i];
            if(item["name"] == name)
            {
               gLstUser.splice(i,1);
                break;
            }
        }
        var table=document.getElementById("userTable");
        for(var i = 1; i < table.rows.length;++i)
        {
            var cell1 = table.rows[i].cells[0];
            if (cell1.innerHTML == name)
            {
                table.deleteRow(i);
                break;
            }
        }
        SaveUserName();
    }
    
    function SaveUserName()
    {
        var str = JSON.stringify(gLstUser);
        var showInfo = document.getElementById("saveinfo");
        showInfo.innerText = str;
    
        localStorage.setItem("baiduTieBa",str);
    }
    function LoadUserName()
    {
        var showInfo = document.getElementById("saveinfo");
        var str = localStorage.getItem("baiduTieBa");
        if(str == null || str == undefined)
        {
            showInfo.innerText = "无存储数据";
            return;
        }
    
        showInfo.innerText = str;
    
        gLstUser = JSON.parse(str);
    
        for(var i = 0; i< gLstUser.length; ++i)
        {
            var item = gLstUser[i];
            insertTable(item["name"],item["opera"],true);
        }
    
    }
    //全局代码
    var gLstUser = new Array();
    initSetting();
    View Code

    popup.html

    <html>
    <body>
    <h1>hello</h1>
    <h2>屏蔽信息</h2>
    <div id="lajiinfo">
    
    </div>
    <script src="popup.js"></script>
    </body>
    </html>
    View Code

    popup.js

    function init()
    {
        var ele = document.getElementById("lajiinfo");
        //ele.innerHTML+="<label>wsm</label>";
        chrome.tabs.getSelected(null,function(tab) {
            ele.innerHTML+="<label>"+tab.url+"</label><br/>";
            var str = localStorage.getItem(tab.url);
            //ele.innerHTML+="<label>"+str+"</label><br/>";
            var lstinfo=JSON.parse(str);
            for(var i=0;i<lstinfo.length;++i)
            {
                var item = lstinfo[i];
                var name=item["name"];
                ele.innerHTML+="<hr><label>"+name+"</label><br/>";
                var lstinf = item["msgInfo"];
                for(var j=0;j<lstinf.length;++j)
                {
                    var msg=lstinf[j];
                    ele.innerHTML+="<div>"+msg+"</div><br/>";
                }
            }
        })
    
    }
    
    init();
    View Code

    bkg.js

     1 function GetLocalStorage(skey)
     2 {
     3     return localStorage.getItem(skey);
     4 }
     5 
     6 chrome.runtime.onMessage.addListener(function(message, sender, sendResponse)
     7 {
     8     if(message["type"] == "getLocalStorage")//获取用户信息
     9     {
    10         sendResponse(GetLocalStorage(message["key"]));
    11     }
    12     else if(message["type"]=="userDealInfo")//设置当前页面过滤的条目数
    13     {
    14         var userDealInfo = message["key"];
    15         setIconAndBlade(userDealInfo);
    16     }
    17 })
    18 
    19 //根据信息显示icon和数字
    20 function setIconAndBlade(userDealInfo)
    21 {
    22     var iCount1=0;//屏蔽
    23     var iCount2=0;//增强
    24     for(var i=0;i<userDealInfo.length;++i)
    25     {
    26         var item = userDealInfo[i];
    27         if(item["opera"]=="屏蔽")
    28         {
    29             iCount1 += item["count"];
    30         }
    31         else if (item["opera"]=="增强")
    32         {
    33             iCount2 += item["count"];
    34         }
    35     }
    36     //alert(iCount1.toString());
    37 
    38 
    39     chrome.browserAction.setBadgeText({text:iCount1.toString()});
    40 
    41 
    42     chrome.tabs.getSelected(null,function(tab){
    43         var str = JSON.stringify(userDealInfo);
    44         localStorage.setItem(tab.url, str);
    45     });
    46 }
    47 
    48 chrome.tabs.onActivated.addListener(function(activeInfo) {
    49     var iTabId = activeInfo["tabId"];
    50     //根据当前标签页面情况设置图标和数字
    51     chrome.tabs.getSelected(null,function(tab){
    52         try
    53         {
    54             if(tab.url.toString().indexOf("tieba.baidu.com/p") >= 0)
    55             {
    56                 var str = localStorage.getItem(tab.url);
    57                 if(str != null && str != undefined)
    58                 {
    59                     setIconAndBlade(JSON.parse(str));
    60                 }
    61                 else
    62                 {
    63                     chrome.browserAction.setBadgeText({text:"0"});
    64                 }
    65                 chrome.browserAction.setIcon({ path:"images/tieba_online.png"});
    66             }
    67             else
    68             {
    69                 chrome.browserAction.setIcon({ path:"images/tieba_offline.png"});
    70                 chrome.browserAction.setBadgeText({text:""});
    71             }
    72         }
    73 
    74         catch (e)
    75         {
    76             alert(e.message);
    77         }
    78     })
    79 })
    View Code
  • 相关阅读:
    asp的多国语言构思
    制作IE和FF都支持的无限级关联菜单
    破解网络尖兵(真正对付限制ADSL路由共享的方法)
    Asp透过系统DSN链接mysql数据库
    找到了一首曾经很喜欢的老歌
    生意人应具备的性格
    简单的操作让你的迅雷变的清爽
    线路分流自动跳转代码
    通过regsvr32注册DLL可以解决的一些疑难杂症
    页面无刷新超时自动退出
  • 原文地址:https://www.cnblogs.com/mandaren/p/3931572.html
Copyright © 2011-2022 走看看