讓 QQ 郵箱更好用,支持桌面通知

前言

騰訊家的 QQ 郵箱和企業郵箱很好用,以前一直是用着網頁版,最多加上個手機 APP 收個推送,反正也不是着急的事兒。javascript

急了

最近由於工做的緣由,對收郵件的實時性有了更高的要求。java

一開始,我試用了幾款郵箱客戶端,發現所謂實時性,就是調整經過 POP3 拉取郵件的頻率而已,然而那遠程拉取的效率,實在不敢恭維,並且還要在本地作存儲,浪費大量磁盤空間,實在不是很爽利。程序員

我只是想要一個通知而已

其實個人需求很簡單,我只想在郵箱裏收到郵件時,在電腦桌面給本身一個通知便可,而 QQ 郵箱的網頁版其實已經經過一個長鏈接實現了實時監控郵件到帳的功能。web

網頁版桌面通知

因而,我只要能找到這裏長鏈接的代碼,在收到新郵件時,調用一個桌面通知,事情豈不就完美解決了?!數組

因而,我找到了這麼一段代碼bash

(function() {
        var e = a
          , f = getTop();
        f.loadJsFile(f.getPath("js") + f.getFullResSuffix("qmwebpush.js"), true, f.document, function() {
            QMWebpush.getInst().addEvent((1 << e._nTOTALSERVICES - 1) * 2 - 1, function(g, h) {
                e._addData(g, h)._reloadWin(g)._updateTip()._setDocTitle();
            }).open(e._mnOpenServices);
            e._mbInit = true;
        });
    }
    )();
複製代碼

簡單的說,這段代碼是用來在收到新郵件後,在網頁內右下角彈框提醒的功能,那麼我在這兒加一段桌面通知豈不完美?!dom

贊,就是這麼幹。ui

來一段猴子腳本

在猴子腳本里,能夠經過unsafeWindow來訪問到頁面窗口對象,在上文代碼裏,挑一個代碼來 hook 一下:spa

var oldUpdateTip = unsafeWindow.QMWebpushTip._addData;
    unsafeWindow.QMWebpushTip._addData = function(g,h){
        console.log('_addData',g,h);
        setTimeout(function(){
            if (h && h[0] && h[0]['subject'] && h[0]['summary'] )
            {
                notifyMail(h[0]['subject'] , h[0]['summary']);
            }
        },2000);
        return oldUpdateTip(g,h);
    }
複製代碼

這裏的參數中,h 變量就是個數組,裏面放着的就是新郵件的數據,因而取出郵件標題和描述,彈桌面通知便可:code

function notifyMail(title,body)
    {
        var tag = "sds"+Math.random();
         Notification.requestPermission(function (perm) {
            if (perm == "granted") {
                var notify = new Notification(title.replace(/&nbsp;/g,''), {
                    tag: tag,
                    // icon: "https://exmail.qq.com/favicon.ico",
                    body: body.replace(/&nbsp;/g,'')
                });
                notify.onclick=function(){
                    //若是通知消息被點擊,通知窗口將被激活,且點擊收件箱。
                    console.log("桌面消息點擊了!!!");
                    if (document.getElementById('folder_1'))
                    {
                        document.getElementById('folder_1').click();
                    }
                    else if (parent.document.getElementById('folder_1'))
                    {
                        parent.document.getElementById('folder_1').click();
                    }
                    window.focus();
                    notify.close();
                };
                notify.onerror = function () {
                    console.log("桌面消息出錯!!!");
                };
                notify.onshow = function () {
                    console.log("桌面消息成功");
                    // setTimeout(function(){
                    //             notify.close();
                    //         },2000)
                };
                notify.onclose = function () {
                    console.log("桌面消息關閉!!!");
                };
            }
        })
    }
複製代碼

這裏用到了Notification,具體用法網上一大堆,就不廢話了。

後語

因此啊,本身動手豐衣足食,程序員,是否是挺有意思的。

注:此文只分享一些工做生活中的小思考,並不提供完整的腳本下載,敬請理解。

相關文章
相關標籤/搜索