javascript - WebExtensions 中的 browser.alarms.create 与 setTimeout/setInterval 有何区别?

标签 javascript google-chrome-extension firefox-addon firefox-addon-webextensions add-on

我正在为浏览器创建一个 WebExtension。所以我发现了the browser.alarms API .它基本上允许您设置(重复发生或一次性)警报,并将触发回调。

现在,我们已经在 J​​avaScript 中拥有这样一个特性 this 很长一段时间了,就像在 setTimeout 中一样。和 setInterval .所以有什么区别对这些?为什么或在什么情况下我更喜欢 一个比一个 ?

我的意思是主要区别很明显:您只能重新启动它,例如在几分钟内,而不是几秒钟。虽然,我认为 when您也可以以毫秒精度取消注册并重新注册它,但我认为 API 可能适用于更长的时间,即几分钟。 (我只是在这里猜测。)
那么我为什么要使用它而不是简单的 setInterval/setTimeout打回来?

最佳答案

  • setTimeout/setInterval 时间跨度受 2^31-1 = 2147483647 即约 24 天的限制。小于 0 或大于该值的值会被强制转换为 int32 范围,这可能会产生意想不到的结果。
  • setTimeout/setInterval 是标准 DOM 的一部分,而不是 isolated world ,因此当您在内容脚本中使用它时,网页脚本可以通过 clearTimeout/clearInterval 意外清除它们。
    解决方法:向后台脚本发布一条消息,以便它设置计时器并在完成后发送响应。
  • Event pages (manifest.json 中有 "persistent": false 的那些)在卸载之前不会等待 setTimeout/setInterval 由于不活动并且不会为这样的计时器唤醒,因此您只能在很短的时间内使用它们(当前事件页面保证存活 5 秒)。

  • 在这些指定的限制内,您可以安全地使用 setTimeout/setInterval。

    关于javascript - WebExtensions 中的 browser.alarms.create 与 setTimeout/setInterval 有何区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53250235/

    相关文章:

    javascript - 列出 Chrome 扩展程序中的所有网络可访问资源

    c# - 将 C# 正则表达式转换为 javascript

    javascript - 动态解除绑定(bind)XBL的动态方式

    javascript - 获取 Firefox 扩展中选定文本的 HTML

    javascript - 在可放置 div 中拖动 div 标签时显示插入符(光标)

    javascript - 两种表单提交方法的区别

    google-chrome - 使用 Chrome 身份验证访问 Chrome 扩展中的 gmail api

    firefox - 有人知道如何从 Firefox 运行可执行文件吗?

    javascript - 如何获取 anchor 标记的子值?

    PHP echo javascript 与变量