chrome插件實踐-基于禪道的bug自定義統(tǒng)計

你需要了解的內(nèi)容

-Chrome擴展文件

  • Chrome擴展文件以.crx為后綴名循榆,在Google Chrome擴展官方網(wǎng)站下載擴展時,Chrome會將.crx文件下載到Chrome的Application Data文件夾的User Data\Temp下泽篮,一般是C:\Documents and Settings*User*\Local Settings\Application Data\Google\Chrome\User Data\Temp泼各,安裝完成或者取消安裝扣蜻,該文件就會被刪除莽使。.crx實際上是一個壓縮文件吮旅,使用解壓文件打開這個文件就可以看到其中的文件目錄庇勃,下圖中是“關(guān)燈看視頻”擴展的截圖:
Paste_Image.png
  • 因此可以認為,我們實際上就是寫一個Web應(yīng)用掂铐,然后將按照Chrome的規(guī)定將一個快捷方式放在Chrome工具欄上。
    2衷掷、Browser Actions(擴展圖標)
  • 把Browser Actions翻譯成擴展圖標不是很準確戚嗅,但它的功能就是把你的應(yīng)用顯示在Chrome工具欄上懦胞。我們在上面看到一個文件manifest.json躏尉,就是使用這個文件來把相應(yīng)的圖標和其他參數(shù)注冊到Browser Actions胀糜。比如下圖中就是EverNote的擴展圖標僚纷。

Paste_Image.png

3、Page Actions(地址欄圖標)

  • 如果你熟悉一些Chrome插件的話陡蝇,你一定會發(fā)現(xiàn)有些擴展的圖標不是顯示在地址欄的右邊登夫,而是顯示在地址內(nèi)部右方恼策,這就是Page Actions地址欄圖標涣楷。
Paste_Image.png
  • 可以看出上面中有三個Page Actions狮斗,圖中我標出的是Chrome添加書簽碳褒,現(xiàn)在你就會發(fā)現(xiàn)其實這個也是Chrome的擴展沙峻,只不是它是直接內(nèi)置在Chrome的。
  • Page Actions與Browser Actions的區(qū)別就是Page Actions不是隨時都是顯示的睹逃,必須在特定的頁面中這個功能才能使用沉填。因此在開發(fā)中注意:如果不是全部頁面中都能使用的功能請使用Page Actions方式翼闹。
    4猎荠、popup彈出窗口
    popup屬于Browser Actions关摇,當點擊圖標時出現(xiàn)這個窗口输虱,可以在里面放置任何html元素宪睹,它的寬度是自適應(yīng)的亭病。當然罪帖,這個彈出窗口不會被Chrome攔截的:)
    如下圖中是evernote的popup窗口:

Paste_Image.png

5、Background Pages后臺頁面
這個窗口不會顯示葬项,它是擴展程序的后臺服務(wù)迹蛤,它會一直保持運行。比如在一些需要數(shù)據(jù)保存程序中陋桂,如果當前用戶關(guān)閉popup嗜历,就需要Background Pages來進行相應(yīng)的操作梨州。

實踐

  • 自動統(tǒng)計禪道的周統(tǒng)計暴匠,上周遺留
  • popup.html中popup.js發(fā)送統(tǒng)計信息給d.js每窖,d.js統(tǒng)計好數(shù)據(jù)后在返回給popup.js
  • manifest.json是配置文件
{

"name": "Long Extension Title",

"short_name": "Short Name",

"version": "1.0.0",

"manifest_version": 2,

"description": "Description of the Extension",

"icons": {

"128": "16.png"

},

"browser_action": {

"default_icon": "16.png",

"default_title": "",

"default_popup": "popup.html"

},

"background": {

"scripts": ["background.js"]

},

"content_scripts": [{

"matches": ["http://182.254.228.211:9099/*"],

"js": ["d.js","jquery.js"],

"run_at": "document_end"

}],

"permissions": [

"tabs",

"http://182.254.228.211:9099/"

],

"web_accessible_resources": ["popup.js"]

}
  • popup.js主要是針對于popup.html中的元素操作窒典,其中chrome.tabs.sendMessage是發(fā)送一個類似于廣播的信息出去 d.js 是實際操作頁面元素的腳本
  • popup.js代碼:
document.addEventListener('DOMContentLoaded', function () {
    document.querySelector('#weekAddBug').addEventListener('change', changeHandler);
    document.querySelector('#WeekRsoleBug').addEventListener('change', changeHandler);
    document.querySelector('#lastWeekNoBug').addEventListener('change', changeHandler);
    document.querySelector('#noRsoleBug').addEventListener('change', changeHandler);
    document.querySelector('#resoleBug').addEventListener('change', changeHandler);
});

function changeHandler(){
    //Do Something...maybe another function showAlert(), for instance
    if(document.getElementById("weekAddBug").checked){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {startDate: $("#tbStartDate").val(),BugType:"weekAddBug"}, function(response) {
                console.log(response.farewell);
            });
        });
        chrome.tabs.executeScript({
            file: 'd.js'
        });
    }
    if(document.getElementById("WeekRsoleBug").checked){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {startDate: $("#tbStartDate").val(),BugType:"WeekRsoleBug"}, function(response) {
                console.log(response.farewell);
            });
        });
        chrome.tabs.executeScript({
            file: 'd.js'
        });
    }

    if(document.getElementById("lastWeekNoBug").checked){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {startDate: $("#tbStartDate").val(),BugType:"lastWeekNoBug",endDate:$("#tbEndDate").val()}, function(response) {
                console.log(response.farewell);
            });
        });
        chrome.tabs.executeScript({
            file: 'd.js'
        });
    }
    if(document.getElementById("noRsoleBug").checked){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {BugType:"noRsoleBug"}, function(response) {
                console.log(response.farewell);
            });
        });
        chrome.tabs.executeScript({
            file: 'd.js'
        });
    }
    if(document.getElementById("resoleBug").checked){
        chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
            chrome.tabs.sendMessage(tabs[0].id, {BugType:"resoleBug"}, function(response) {
                console.log(response.farewell);
            });
        });
        chrome.tabs.executeScript({
            file: 'd.js'
        });
    }

}
  • d.js中的代碼
chrome.runtime.onMessage.addListener(
    function(request, sender, sendResponse) {
        console.log(sender.tab ?
        "from a content script:" + sender.tab.url :
            "from the extension");

        if (request.BugType == "weekAddBug"){
            weekAddFindBug(request.startDate);
            sendResponse({farewell: "新增Bug統(tǒng)計"});
        }
        if (request.BugType == "WeekRsoleBug"){
            WeekRsoleBug(request.startDate);
            sendResponse({farewell: "本周實解Bug統(tǒng)計"});
        }
        if (request.BugType == "lastWeekNoBug") {
            lastWeekNoBug(request.startDate, request.endDate);
            sendResponse({farewell: "上周遺留Bug統(tǒng)計"});
        }
        if (request.BugType == "noRsoleBug"){
            noRsoleBug();
            sendResponse({farewell: "沒有解決總數(shù)Bug統(tǒng)計"});
        }
        if (request.BugType == "resoleBug"){
            resoleBug();
            sendResponse({farewell: "解決總數(shù)Bug統(tǒng)計"});
        }

    });


//本周新增

function  weekAddFindBug(d)
{
//d:"2015-10-9"
    $("#bysearchTab").click();
    setTimeout(1000);
    $("#searchmore").click();
//創(chuàng)建日期
    $("#field2 option").eq(27).attr("selected", "selected");
//創(chuàng)建日期選擇條件
    $("#operator2 option").eq(3).attr("selected", "selected");
//創(chuàng)建的具體日期
    $("#value2").val(d);
    $("#value5").val("");
    $("#submit").click();
}

如何打包chrome插件

  • 打開chrome瀏覽器的開發(fā)中選項后室,點擊“打包擴展程序…”,彈出打包選擇文件窗口将饺,在擴展程序根目標中找到我們建立的文件夾予弧,私有密碼文件第一次不用選擇掖蛤。點擊確定蚓庭,它會在根文件夾同一級生成XXX.crx和XXX.pem,XXX.pem是程序簽名文件垢袱。把XXX.crx拖進Chrome窗體內(nèi)请契,就會把這個應(yīng)用XXX插件安裝在Chrome里爽锥。
Paste_Image.png

更多參考

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末释树,一起剝皮案震驚了整個濱河市秸仙,隨后出現(xiàn)的幾起案子桩盲,更是在濱河造成了極大的恐慌赌结,老刑警劉巖柬姚,帶你破解...
    沈念sama閱讀 211,290評論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件量承,死亡現(xiàn)場離奇詭異,居然都是意外死亡拿穴,警方通過查閱死者的電腦和手機默色,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,107評論 2 385
  • 文/潘曉璐 我一進店門弟蚀,熙熙樓的掌柜王于貴愁眉苦臉地迎上來义钉,“玉大人捶闸,你說我怎么就攤上這事⊙氲” “怎么了亿虽?”我有些...
    開封第一講書人閱讀 156,872評論 0 347
  • 文/不壞的土叔 我叫張陵,是天一觀的道長苞也。 經(jīng)常有香客問我洛勉,道長,這世上最難降的妖魔是什么如迟? 我笑而不...
    開封第一講書人閱讀 56,415評論 1 283
  • 正文 為了忘掉前任收毫,我火速辦了婚禮窗慎,結(jié)果婚禮上钩乍,老公的妹妹穿的比我還像新娘尾膊。我一直安慰自己尉桩,他們只是感情好舆蝴,可當我...
    茶點故事閱讀 65,453評論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著草讶,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上汁政,一...
    開封第一講書人閱讀 49,784評論 1 290
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死现横,一個胖子當著我的面吹牛姜盈,可吹牛的內(nèi)容都是我干的救拉。 我是一名探鬼主播,決...
    沈念sama閱讀 38,927評論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼秆吵,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起爷肝,我...
    開封第一講書人閱讀 37,691評論 0 266
  • 序言:老撾萬榮一對情侶失蹤纵竖,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后厕宗,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,137評論 1 303
  • 正文 獨居荒郊野嶺守林人離奇死亡乍丈,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,472評論 2 326
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了宗收。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,622評論 1 340
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出抄课,到底是詐尸還是另有隱情抵拘,我是刑警寧澤衣形,帶...
    沈念sama閱讀 34,289評論 4 329
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響榔袋,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜脓钾,卻給世界環(huán)境...
    茶點故事閱讀 39,887評論 3 312
  • 文/蒙蒙 一长已、第九天 我趴在偏房一處隱蔽的房頂上張望恬汁。 院中可真熱鬧偎痛,春花似錦贪婉、人聲如沸娜膘。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽手报。三九已至,卻和暖如春腥泥,著一層夾襖步出監(jiān)牢的瞬間裆悄,已是汗流浹背瞎访。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評論 1 265
  • 我被黑心中介騙來泰國打工尼啡, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留雌续,地道東北人。 一個月前我還...
    沈念sama閱讀 46,316評論 2 360
  • 正文 我出身青樓丑孩,卻偏偏與公主長得像览妖,于是被迫代替她去往敵國和親奄侠。 傳聞我的和親對象是個殘疾皇子涂召,可洞房花燭夜當晚...
    茶點故事閱讀 43,490評論 2 348

推薦閱讀更多精彩內(nèi)容