【问题标题】:setTimeOut scope in a Chrome extensionChrome 扩展中的 setTimeOut 范围
【发布时间】:2013-05-13 12:25:11
【问题描述】:

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

function setNotificationDelay() {
    clearNotificationTimer();
    newDelay = getNotificationDelay()
    notificationTimer = setTimeout(showNotification, newDelay);
    }
}

我还有一个 options.html 页面,它允许配置通知时间。我想在修改配置时修改后台超时,但是当我从选项页面调用 setNotificationDelay() 时它不起作用,我认为这是因为定时器的范围附加到父页面。

如果我让选项页面打开,则会触发超时,如果我关闭它,则通知永远不会发生。

如何将此计时器附加到背景页面? 有没有更好的方法来实现它?

谢谢。

编辑:chrome.extension 有 getBackground 页面方法,它返回背景页面的窗口对象:

function setNotificationDelay() {
    clearNotificationTimer();
    newDelay = getNotificationDelay()
    notificationTimer = chrome.extension.getBackgroundPage().setTimeout(showNotification, newDelay);
    }
}

【问题讨论】:

    标签: javascript google-chrome-extension settimeout


    【解决方案1】:

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

    需要注意的一点是,如果您使用的是event pages 而不是背景页面,则不会出现超过几秒钟的通知,因为 Chrome 会卸载背景页面。在这种情况下,您需要改用alarms

    编辑:你的编辑让我觉得我不理解你。也许您希望用户在计时器运行时更​​改时间间隔?然后我建议用newDelaybackground.js 发送message,然后用它来调用setNotificationDelay()

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-04-12
      • 2015-06-01
      • 1970-01-01
      • 2023-04-04
      • 2018-01-03
      • 1970-01-01
      • 2018-08-16
      相关资源
      最近更新 更多