Chrome扩展程序中的setTimeOut范围

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

标签: javascript google-chrome-extension settimeout

我的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);
    }
}

1 个答案:

答案 0 :(得分:2)

options.js仅在options.html页面处于打开状态时处于活动状态,我认为您在等待通知时不想让页面保持打开状态。你想要的(我认为)是让background.js设置通知(background.jsoptions.js访问相同的字符串变量localStorage.yourNotificationDelay)。

要注意的一件事是,如果您使用的是event pages而不是背景页面,则不会发生超过几秒钟的通知,因为Chrome会卸载后台页面。在这种情况下,您需要使用alarms代替。

编辑:您的编辑让我觉得我不理解您。也许您希望用户在计时器运行时更​​改间隔?然后,我建议使用background.jsnewDelay发送message,然后使用该setNotificationDelay()来呼叫{{1}}。