我无法在同一个标​​签

时间:2016-04-04 23:16:53

标签: google-chrome-extension notifications push-notification desktop

单击我在通知上创建的查看产品按钮后,链接将在新选项卡中打开,但对于第二个通知,该链接将打开两个类似的选项卡,然后继续。 随着通知的增加,标签会不断增加。 这是一个电子商务网站

这是我的代码。我不知道哪里出错了。

var messages = [] ;
var ids = [] ;

var latestItem;


$(function(){
engine();
    setInterval(engine, 60000);
}); 

function engine(){
    var newItems = [];
        $.get('https://www.mysite.or/electronics-video/', function(data){
            var htmlData = data;

            $data = ($(htmlData).find('.offer').eq(0));
            $data.find('.fleft').remove();

            $data.find('.rel.observelinkinfo.inlblk.zi3').remove();
            $data.find('.suggesttitleright.small.top.abs.zi2.br4.hidden').remove();
            $data.find('.thumb.vtop.inlblk.rel.tdnone.linkWithHash.scale4.detailsLink').remove();
            $data.find('.color-9.lheight16.margintop5').remove();
            $data.find('.breadcrumb.x-normal').remove();
            $data.find('.normal.inlblk.pdingtop5.lheight16.color.2').remove();


        $('body').append($data);

        for(i = 0; i<$data.find('h3.x-large.lheight20.margintop5').length; i++){

            ids[i]=($($data).find('td.wwnormal.tright.td-price').eq(i).find('p.price').text()).replace(/\n\r/g, '').trim();
            messages[i]= ($($data).find('h3.x-large.lheight20.margintop5').eq(i).find('a.marginright5.link.linkWithHash.detailsLink').text()).replace(/\n\r/g, '').trim();

        }


if (latestItem == ids[0]) {

    }else if(latestItem === undefined) {
        var firstRun = {
            type: "basic",
            title: "Site Notifier",
            message: 'Visit the website for updates on new products',
            iconUrl: "origi.png"
        }


        chrome.notifications.create(firstRun);
        latestItem = ids[0];

    }else if(latestItem != ids[0]) {
        for(j = 0; j<ids.length; j++){
            if(latestItem == ids[j]){
                break;
            }else{
                if (messages[j] != " "){
                newItems[j]= messages[j].concat(" - ").concat(ids[j]);
            }
        }

    }
        latestItem = ids[0];
    }
        if (newItems.length == 0){


        }else{
            for(i=0;i<newItems.length; i++){
        var myItem = {
            type: "basic",
            title: "New Product Alert!",
            message: newItems[i],
            contextMessage: "Site Notifier",
            buttons: [{
                title: "View Product"

            }],
            iconUrl: "origi.png"
        };

        chrome.notifications.onButtonClicked.addListener(function(){
            window.open('https://www.mysite.or/electronics-video/');


        });

        chrome.notifications.create(myItem);

            }
        }
    });
}

2 个答案:

答案 0 :(得分:0)

尝试以下代码

 chrome.notifications.onButtonClicked.addListener(function (notificationId, buttonIndex) {
    if (notificationId == '1234567' && buttonIndex == 0) {
        var $ismysite = false;
        chrome.windows.getAll({ populate: true }, function (windows) {
            windows.forEach(function (window) {
                window.tabs.forEach(function (tab) {
                    if (tab.url.toString().lastIndexOf('mysite') > -1) {
                        $ismysite= true
                    }
                });
            });
            if (!$ismysite) {
                $ismysite = false;
                chrome.tabs.create({ url: "YourSire" }, function () {
                });
            }
        });
    }
});

答案 1 :(得分:0)

在您的代码中,最后if (newItems.length == 0)
else语句将为 newItems 数组的每个元素创建通知 AND 它将添加onClicked侦听器。
你需要拔出

chrome.notifications.onButtonClicked.addListener(function(){
  window.open('https://www.mysite.or/electronics-video/');
});

在那个循环之外的某个地方 如果您需要知道单击了哪个通知,则可以在回调中按ID查找。为此,您可能需要在全局对象中维护一些ID-url连接。