我的Chrome扩展程序中有一个通知功能,由后台页面管理(background.html) 此页面调用setNotificationDelay()函数,该函数基本上是先前计时器的删除,后跟setTimeOut。
function setNotificationDelay() {
clearNotificationTimer();
newDelay = getNotificationDelay()
notificationTimer = setTimeout(showNotification, newDelay);
}
}
我还有一个options.html页面,允许配置通知小时。我想在修改配置时修改后台超时,但是当我从Option页面调用setNotificationDelay()时它不起作用,我认为这是因为定时器的范围附加到父页面。
如果我打开选项页面,则触发超时,如果我关闭它,通知就不会发生。
如何将此计时器附加到后台页面? 有没有更好的方法来实现它?
感谢。
编辑:chrome.extension有getBackground页面方法,它返回后台页面的窗口对象:
function setNotificationDelay() {
clearNotificationTimer();
newDelay = getNotificationDelay()
notificationTimer = chrome.extension.getBackgroundPage().setTimeout(showNotification, newDelay);
}
}
答案 0 :(得分:2)
options.js
仅在options.html
页面处于打开状态时处于活动状态,我认为您在等待通知时不想让页面保持打开状态。你想要的(我认为)是让background.js
设置通知(background.js
和options.js
访问相同的字符串变量localStorage.yourNotificationDelay
)。
要注意的一件事是,如果您使用的是event pages而不是背景页面,则不会发生超过几秒钟的通知,因为Chrome会卸载后台页面。在这种情况下,您需要使用alarms代替。
编辑:您的编辑让我觉得我不理解您。也许您希望用户在计时器运行时更改间隔?然后,我建议使用background.js
向newDelay
发送message,然后使用该setNotificationDelay()
来呼叫{{1}}。