javascript - Chrome 扩展 setTimeout 无法正常工作

标签 javascript google-chrome google-chrome-extension google-chrome-devtools settimeout

我在这里的第一篇文章 =]。

我正在构建一个 chrome 扩展,我正在递归地使用 setTimeout。我注意到,如果我将它设置为最多 13 秒,它会起作用,但如果我将它设置为 14 秒以上,它就不起作用。

这是我的 background.js 中的示例

function start() {

    var timeout = setTimeout( function() { start(); }, 1000*15);
    alert('test');
}

chrome.webNavigation.onCompleted.addListener(function(o) {

    start();

    }, {
      url: [
        {urlContains: 'http://www.example.com/in.php'},
        {urlContains: 'http://www.example.com/out.php'}
      ]
    }
);

如果将该超时减少到 1000*13,它就可以工作。

这是我的 manifest.json

{
  "name": "Extension",
  "version": "0.0.7",
  "manifest_version": 2,
  "description": "Keeps proxy session alive",
  "homepage_url": "http://www.example.com",
  "icons": {
    "16": "icons/icon16-on.png",
    "48": "icons/icon48-on.png",
    "128": "icons/icon128-on.png"
  },
  "default_locale": "en",
  "background": {
    "scripts": [
      "src/bg/background.js"
    ],
    "persistent": false
  },
  "browser_action": {
    "default_icon": "icons/icon19.png",
    "default_title": "Example - Off",
    "default_popup": ""
  },
 "permissions": [
    "webNavigation", 
    "*://*/*",
    "https://*/*"
  ]
}

知道是什么导致了这种奇怪的情况吗?我正在开发人员模式下对此进行测试,顺便说一句。

提前致谢!

编辑

代码修复:

list .json

我在权限中添加了“警报”

background.js

添加此事件以监听 alarms.create:

chrome.alarms.onAlarm.addListener(function(alarm){
    start();
});

用下面一行替换了 setTimeout 函数

chrome.alarms.create("Start", {periodInMinutes:1});

希望这对您有所帮助!

最佳答案

我怀疑问题可能与事件页面在一段时间不活动后自动暂停有关。在我的机器上,onSuspend 似乎在约 10 秒后调用。

https://developer.chrome.com/extensions/event_pages#lifetime注意到

Once the event page has been idle a short time (a few seconds), the runtime.onSuspend event is dispatched. The event page has a few more seconds to handle this event before it is forcibly unloaded.

因此,这可能会让您在页面实际卸载之前多出 13 秒左右(我认为在 onSuspend 中给您一些清理时间)。然后您的页面被卸载,从那里启动的代码不再运行。

https://developer.chrome.com/extensions/event_pages#transition说要使用 alarms api用于事件页面而不是 setTimeout

关于javascript - Chrome 扩展 setTimeout 无法正常工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26539801/

相关文章:

php - 如何修改现有的 javascript 以显示包括美分在内的货币值?

c# - 在 Chrome 缓存中调试 MVC2 项目过于激进

javascript - 动态更新popup.html内容

javascript - 如何使用 Javascript 在网络上随机更改计时器上的 HTML 元素,而不仅仅是在浏览器中?

javascript - 数据表编辑器不发送 ID

javascript - JS 或 TS - 获取接口(interface)的键

css - 正文背景图片未在 IE 中显示

html - 包含SVG图片的HTML框与图片的宽高比不匹配

javascript - Chrome 扩展 : sending data to window created with chrome. windows.create

javascript - Chrome 内容脚本不工作 : DOMContentLoaded listener does not execute