如何创建chrome.notification实时?

时间:2014-07-25 14:56:21

标签: javascript jquery json google-chrome-extension

使用google chrome Api扩展程序,我有以下代码显示来自JSON的通知。一旦显示通知,当我点击它时打开多个标签url(这是一个错误)。我需要解决这个问题,因为这应该只打开一个标签网址,这是唯一的问题。看下面的代码:

var timeChange = 1000, jsons = ['JSON_URL'];

updateValue = function() {
    var colorStatus = 0;

    chrome.storage.local.get(function (dataStorage) {
            $.getJSON(jsons+'?'+$.now(), function (data) {   

            var jLastPost = {'LastNotification':''}, sizePost = (data.results.length - 1),     dataLastPost = data.results[0];
            totalEntradas = data.totalEntradas ? data.totalEntradas : '';   

            $.each(data.results, function (k,v) {
                if (($.inArray('post-'+v.id, dataStorage.IDs) !== -1) && (v.date_status > 0)) {
                colorStatus = 1;
                }
            });

            chrome.browserAction.setBadgeText({'text': totalEntradas.toString()});

            if (dataStorage.LastNotification !== dataLastPost.id) 
            {

                jLastPost.LastNotification = dataLastPost.id;
                chrome.storage.local.set(jLastPost);

                chrome.notifications.create(dataLastPost.id,{
                    type: 'basic',
                    title: dataLastPost.titulo,
                    message: 'Now for you!',
                    iconUrl: dataLastPost.image
                }, function (id) {});

                chrome.notifications.onClicked.addListener(function () {
                     chrome.tabs.create({url: dataLastPost.uri});
                });

                chrome.notifications.clear(dataLastPost.id, function() {});
                return false;
            }
        });
    }); 
setTimeout(updateValue, timeChange);
}   

updateValue();

1 个答案:

答案 0 :(得分:0)

当您运行chrome.notifications.onClicked时,您每秒都会附加一个updateValue侦听器。至少应该将侦听器移到方法之外。

这些方面应该有所作为。

var timeChange = 1000, jsons = ['JSON_URL'];
var lastPostUri;

chrome.notifications.onClicked.addListener(function () {
    if (lastPostUri) {
        chrome.tabs.create({url: lastPostUri});
    }
});

updateValue = function() {
    var colorStatus = 0;

    chrome.storage.local.get(function (dataStorage) {
            $.getJSON(jsons+'?'+$.now(), function (data) {   

            var jLastPost = {'LastNotification':''}, sizePost = (data.results.length - 1),     dataLastPost = data.results[0];
            totalEntradas = data.totalEntradas ? data.totalEntradas : '';   

            $.each(data.results, function (k,v) {
                if (($.inArray('post-'+v.id, dataStorage.IDs) !== -1) && (v.date_status > 0)) {
                colorStatus = 1;
                }
            });

            chrome.browserAction.setBadgeText({'text': totalEntradas.toString()});

            if (dataStorage.LastNotification !== dataLastPost.id) 
            {

                jLastPost.LastNotification = dataLastPost.id;
                chrome.storage.local.set(jLastPost);
                lastPostUri = dataLastPost.uri

                chrome.notifications.create(dataLastPost.id,{
                    type: 'basic',
                    title: dataLastPost.titulo,
                    message: 'Now for you!',
                    iconUrl: dataLastPost.image
                }, function (id) {});

                chrome.notifications.clear(dataLastPost.id, function() {});
                return false;
            }
        });
    }); 
setTimeout(updateValue, timeChange);
}   

updateValue();