chrome插件实践-基于禅道的bug自定义统计

你需要了解的内容

-Chrome扩展文件

  • Chrome扩展文件以.crx为后缀名,在Google Chrome扩展官方网站下载扩展时,Chrome会将.crx文件下载到Chrome的Application Data文件夹的User Data\Temp下,一般是C:\Documents and Settings*User*\Local Settings\Application Data\Google\Chrome\User Data\Temp,安装完成或者取消安装,该文件就会被删除。.crx实际上是一个压缩文件,使用解压文件打开这个文件就可以看到其中的文件目录,下图中是“关灯看视频”扩展的截图:
Paste_Image.png
  • 因此可以认为,我们实际上就是写一个Web应用,然后将按照Chrome的规定将一个快捷方式放在Chrome工具栏上。
    2、Browser Actions(扩展图标)
  • 把Browser Actions翻译成扩展图标不是很准确,但它的功能就是把你的应用显示在Chrome工具栏上。我们在上面看到一个文件manifest.json,就是使用这个文件来把相应的图标和其他参数注册到Browser Actions。比如下图中就是EverNote的扩展图标。

Paste_Image.png

3、Page Actions(地址栏图标)

  • 如果你熟悉一些Chrome插件的话,你一定会发现有些扩展的图标不是显示在地址栏的右边,而是显示在地址内部右方,这就是Page Actions地址栏图标。
Paste_Image.png
  • 可以看出上面中有三个Page Actions,图中我标出的是Chrome添加书签,现在你就会发现其实这个也是Chrome的扩展,只不是它是直接内置在Chrome的。
  • Page Actions与Browser Actions的区别就是Page Actions不是随时都是显示的,必须在特定的页面中这个功能才能使用。因此在开发中注意:如果不是全部页面中都能使用的功能请使用Page Actions方式。
    4、popup弹出窗口
    popup属于Browser Actions,当点击图标时出现这个窗口,可以在里面放置任何html元素,它的宽度是自适应的。当然,这个弹出窗口不会被Chrome拦截的:)
    如下图中是evernote的popup窗口:

Paste_Image.png

5、Background Pages后台页面
这个窗口不会显示,它是扩展程序的后台服务,它会一直保持运行。比如在一些需要数据保存程序中,如果当前用户关闭popup,就需要Background Pages来进行相应的操作。

实践

  • 自动统计禅道的周统计,上周遗留
  • popup.html中popup.js发送统计信息给d.js,d.js统计好数据后在返回给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是发送一个类似于广播的信息出去 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统计"});
        }
        if (request.BugType == "WeekRsoleBug"){
            WeekRsoleBug(request.startDate);
            sendResponse({farewell: "本周实解Bug统计"});
        }
        if (request.BugType == "lastWeekNoBug") {
            lastWeekNoBug(request.startDate, request.endDate);
            sendResponse({farewell: "上周遗留Bug统计"});
        }
        if (request.BugType == "noRsoleBug"){
            noRsoleBug();
            sendResponse({farewell: "没有解决总数Bug统计"});
        }
        if (request.BugType == "resoleBug"){
            resoleBug();
            sendResponse({farewell: "解决总数Bug统计"});
        }

    });


//本周新增

function  weekAddFindBug(d)
{
//d:"2015-10-9"
    $("#bysearchTab").click();
    setTimeout(1000);
    $("#searchmore").click();
//创建日期
    $("#field2 option").eq(27).attr("selected", "selected");
//创建日期选择条件
    $("#operator2 option").eq(3).attr("selected", "selected");
//创建的具体日期
    $("#value2").val(d);
    $("#value5").val("");
    $("#submit").click();
}

如何打包chrome插件

  • 打开chrome浏览器的开发中选项,点击“打包扩展程序…”,弹出打包选择文件窗口,在扩展程序根目标中找到我们建立的文件夹,私有密码文件第一次不用选择。点击确定,它会在根文件夹同一级生成XXX.crx和XXX.pem,XXX.pem是程序签名文件。把XXX.crx拖进Chrome窗体内,就会把这个应用XXX插件安装在Chrome里。
Paste_Image.png

更多参考

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,393评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,790评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,391评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,703评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,613评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,003评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,507评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,158评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,300评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,256评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,274评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,984评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,569评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,662评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,899评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,268评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,840评论 2 339

推荐阅读更多精彩内容

  • chrome扩展开发入门教程 最近在开发chrome插件,看到一篇非常适合入门的教程,特记录一下 注:转载 本文首...
    谢大见阅读 6,409评论 1 25
  • Chrome扩展开发 标签(空格分隔): Chrome扩展 1、写在前面 Chrome插件是一个用Web技术开发...
    记忆的时间差阅读 6,017评论 0 15
  •   Chrome的更新速度可以说前无古人,现在我每天开机的第一件事就是打开Chrome检查是不是有了新版本。界面清...
    babybus_hentai阅读 3,196评论 0 9
  • 架构 总括:Manifest:程序清单Background:插件运行环境/主程序Pop up:弹出页面Conten...
    程序员小逗逼阅读 10,317评论 2 18
  • 周日在家无聊,研究了下chrome的扩展程序(extensions),所谓的扩展程序其实没那么难,基本会html、...
    陆志均阅读 3,439评论 0 0