2013-05-13 45 views
0

我的Chrome扩展中有一个通知功能,由后台页面管理(background.html) 此页面调用setNotificationDelay()函数,该函数基本上是前一个定时器的删除,后面跟着一个setTimeOut。setTimeOut在Chrome扩展中的作用域

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

回答

2

options.js才有效,而options.html页是开放的,我相信你不会想要在等待通知时打开页面。你想要的(我认为)是有background.js设置通知(background.jsoptions.js都访问相同的字符串变量localStorage.yourNotificationDelay)。

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

编辑:你的编辑让我觉得我不理解你。也许你希望用户在计时器运行时更​​改间隔?那么我建议发送一个messagebackground.jsnewDelay,并使用它来呼叫setNotificationDelay()