首页 > 开发 > 综合 > 正文

Firefox的Jetpack扩展案例分析:Gmail邮件提醒

2024-07-21 02:04:39
字体:
来源:转载
供稿:网友

gtalk 软件的最下方有个很好又很实用的功能,就是 gmail 邮件提醒功能。会定时更新你 gmail 中未读新邮件的数量。

gtalk

试想如果我们将此功能移植到 firefox 上一定有趣!

第一步,在状态栏中显示图标和数据。

通过 《如何创建 firefox 的 jetpack 扩展》 这篇文章,我们可以轻易的创建:

jetpack.statusbar.append({
    html
: '<img src="http://mail.google.com/mail/images/favicon.ico"/><span id="count"></span>', //gmail邮件图标和未读新邮件数
    width
: 55, //状态栏上的宽度为55
    onready
: function(widget) {
        $
("#count", widget).css({ //给未读新邮件数添加样式
            cursor
: "pointer",
            paddingleft
:"4px",
            fontfamily
: "tahoma, arial, sans-serif",
            verticalalign
: "top",
            fontsize
: "10px",
            lineheight
:"18px",
       
});
   
}
});

第二步,获取 gmail 的数据,更新未读新邮件数。

可以通过 gmail 邮件的 feed 获得(需登录):https://mail.google.com/mail/feed/atom

feed 源码中的 fullcount 标签是用来记录当前的未读新邮件数。

ok,首先数据源有了。接着,我们使用再熟悉不过的 ajax 技术,获取到数据并赋给指定的元素。

function update(widget) {
   
var widget = $(widget);

    $
.get("https://mail.google.com/mail/feed/atom", function(xml) {
       
var el = $(xml).find("fullcount"); // 记录未读新邮件数的节点
       
if(el){
           
var newcount = parseint(el.get(0).textcontent);
            widget
.find("#count").text(newcount); //赋给指定的元素
       
} else { //如果未登录,显示“login”
            widget
.find("#count").text( "login" );
       
}
   
});
}

我们还可以通过进行一些优化:比如当未读新邮件数大于原来的邮件数时,增加提示信息等。
提示信息这里使用 jetpack.notifications.show(options) 方法,options 参数有三个属性:title (string):通知的标题;icon (url):通知 icon 的 url;body (string):通知的主题内容。

优化后的代码如下:

var count = 0;

function update(widget) {
   
var widget = $(widget),
        notify
= function(msg) { // 定义通知的公用方法
            jetpack
.notifications.show({
                title
: "gmail",
                body
: msg,
                icon
: "http://mail.google.com/mail/images/favicon.ico"
           
});
       
};

    $
.get("https://mail.google.com/mail/feed/atom", function(xml) {
       
var el = $(xml).find("fullcount"); // 记录未读新邮件数的节点
       
if(el){
           
var newcount = parseint(el.get(0).textcontent);
           
if(newcount > count) { // 如果未读新邮件数大于原来的邮件数,则提示来自哪里
               
var sender = $(xml).find("name").get(0).textcontent;
                notify
("new message from "+sender);
           
}
            count
= newcount;
            widget
.find("#count").text(count); //赋给指定的元素

       
} else { //如果未登录,提示登录
            widget
.find("#count").text( "login" );
            notify
("please login to gmail");
       
}
   
});
}

第三步:设置定时更新数据。

我们设置每 1 分钟更新一次数据:

setinterval( function() { update(widget) }, 60*1000 );

第四步:设置点击扩展后的链接窗口。

$(widget).click(function() { //设置点击扩展后的链接窗口
    jetpack
.tabs.open("http://mail.google.com");
    jetpack
.tabs[ jetpack.tabs.length-1 ].focus();
});

jetpack.tabs 为浏览器窗口的标签对象,.open(url) 为新打开浏览器窗口标签的方法,.focus()为选中此标签为当前标签的方法。

ok,firefox 的 jetpack 扩展——gmail 邮件提醒,经过简单的四步轻松完成。

全部代码如下:

var count = 0;

function update(widget) {
   
var widget = $(widget),
        notify
= function(msg) { // 定义通知的公用方法
            jetpack
.notifications.show({
                title
: "gmail",
                body
: msg,
                icon
: "http://mail.google.com/mail/images/favicon.ico"
           
});
       
};

    $
.get("https://mail.google.com/mail/feed/atom", function(xml) {
       
var el = $(xml).find("fullcount"); // 记录未读新邮件数的节点
       
if(el){
           
var newcount = parseint(el.get(0).textcontent);
           
if(newcount > count) { // 如果未读新邮件数大于原来的邮件数,则提示来自哪里
               
var sender = $(xml).find("name").get(0).textcontent;
                notify
("new message from "+sender);
           
}
            count
= newcount;
            widget
.find("#count").text(count); //赋给指定的元素

       
} else { //如果未登录,提示登录
            widget
.find("#count").text( "login" );
            notify
("please login to gmail");
       
}
   
});
}

jetpack
.statusbar.append({
    html
: '<img src="http://mail.google.com/mail/images/favicon.ico"/><span id="count"></span>', //gmail邮件图标和未读新邮件数
    width
: 40, //状态栏上的宽度为40,预留3位数的宽度
    onready
: function(widget) {
        $
("#count", widget).css({ //给未读新邮件数添加样式
            cursor
: "pointer",
            paddingleft
:"4px",
            fontfamily
: "tahoma, arial, sans-serif",
            verticalalign
: "top",
            fontsize
: "10px",
            lineheight
:"18px",
       
});

        $
(widget).click(function() { //设置点击扩展后的链接窗口
            jetpack
.tabs.open("http://mail.google.com");
            jetpack
.tabs[ jetpack.tabs.length-1 ].focus();
       
});

        update
(widget);
        setinterval
( function() {update(widget) }, 60*1000 );
   
}
});

测试demo:http://www.planabc.net/lab/jetpack/gmail/

对于 jetpack 详细的 api,可以阅读 about:jetpack 页面的 api reference 标签部分。

案例源码来自:https://jetpack.mozillalabs.com/demos/gmail-checker.js

发表评论 共有条评论
用户名: 密码:
验证码: 匿名发表