如何设置特定功能的时间间隔?

时间:2013-12-13 05:21:25

标签: google-chrome-extension notifications

目前我已设置时间间隔,每1秒执行一次功能。问题是,我通过此功能显示通知。通知中有通知按钮。当我点击通知操作时按钮,多个窗口正在打开。我发现这是因为我在我的扩展中设置了Timer.But,每次都需要定时器来检查服务器文件的输出。有人请帮帮我。还有其他办法处理这个问题 这是我的background.js

 var myNotificationID = null;
 var oldChromeVersion = !chrome.runtime;
    setInterval(function() {
   updateIcon();
      }, 1000); 

      function onInit() {   
           updateIcon();

         if (!oldChromeVersion) { 
       chrome.alarms.create('watchdog',{periodInMinutes:5,delayInMinutes:  0}); 
           }
       }

      function onAlarm(alarm) {
     if (alarm && alarm.name == 'watchdog') {
    onWatchdog();
    } 
    else {
      updateIcon();
         }
        }

   function onWatchdog() {
  chrome.alarms.get('refresh', function(alarm) {
   if (alarm) {
    console.log('Refresh alarm exists. Yay.');
      } 
     else {
    updateIcon();
  }
   });
   }

 if (oldChromeVersion) {
 updateIcon(); 
   onInit();
  } 

 else {
      chrome.runtime.onInstalled.addListener(onInit);
        chrome.alarms.onAlarm.addListener(onAlarm);
          }




    function updateIcon(){
      if(//something)
       //something

      else{

        chrome.notifications.create(
       'id1',{
       type: 'basic',
       iconUrl: '/calpine_not_logged_in.png',
       title: 'Warning : Attendance',
        message: 'Please mark your Attendance !',
       buttons: [{ title: 'Mark',
                        iconUrl: '/tick.jpg'
                  },{ title: 'Ignore',
                        iconUrl: '/cross.jpg'}],
       priority: 0},
       function(id) { myNotificationID = id;}
        ); 

    chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) {
  if (notifId === myNotificationID) {
    if (btnIdx === 0) {
        window.open("http://www.calpinemate.com/");
    } else if (btnIdx === 1) {
       notification.close();
    }
    }
   });

 chrome.notifications.onClosed.addListener(function() {
  notification.close();
 });    
 }
  } }
  });
    }
   }

的OnInit();

在这里我发现,当我删除delayInminutes并且设置timeineterval它只打开一个选项卡,因为我想要。但是它们都是连续检查服务器文件所必需的。因为整个我的操作是基于在服务器文件输出。有什么办法可以解决这个问题。有没有办法只为那个功能设置时间间隔?

1 个答案:

答案 0 :(得分:1)

问题与你“怀疑”的内容无关。问题是您在chrome.notifications.onButtonClicked函数内添加了updateIcon()个事件的侦听器。所以这就是:

  • 您每执行一次updateIcon()
  • updateIcon()内设置一个侦听器,侦听被点击的通知按钮。
  • 因此,1秒后将有1个监听器,2秒后会有2个监听器, n 秒后会有 n 监听器。
  • 当您点击该按钮时,每个侦听器将捕获onButtonClicked事件并打开一个新窗口。 (因此,自从您加载扩展程序以来已经过了很多秒,所以会有这么多窗口。

如何解决此问题:

您只需要创建一次的侦听器(而不是每秒)。要从updateIcon()函数中删除以下代码:

chrome.notifications.onButtonClicked.addListener(function(notifId, btnIdx) {
    if (notifId === myNotificationID) {
        if (btnIdx === 0) {
            window.open("http://www.calpinemate.com/");
        } else if (btnIdx === 1) {
            notification.close();
        }
    }
});

并将其放在背景页的末尾(就在onInit();之前)。确保不要将其放在任何功能中。