目前我已设置时间间隔,每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它只打开一个选项卡,因为我想要。但是它们都是连续检查服务器文件所必需的。因为整个我的操作是基于在服务器文件输出。有什么办法可以解决这个问题。有没有办法只为那个功能设置时间间隔?
答案 0 :(得分:1)
问题与你“怀疑”的内容无关。问题是您在chrome.notifications.onButtonClicked
函数内添加了updateIcon()
个事件的侦听器。所以这就是:
updateIcon()
。updateIcon()
内设置一个新侦听器,侦听被点击的通知按钮。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();
之前)。确保不要将其放在任何功能中。