Javascript Chrome扩展设置超时无法正常工作

Javascript Chrome扩展设置超时无法正常工作,javascript,google-chrome,google-chrome-extension,google-chrome-devtools,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.onComple

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

我正在构建一个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://*/*"
  ]
}
你知道是什么导致了这种奇怪吗?顺便说一句,我正在开发者模式下测试这个

提前谢谢

编辑

代码固定:

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://*/*"
  ]
}
我在权限中添加了“警报”

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'}
      ]
    }
);
添加此事件以侦听报警。创建:

chrome.alarms.onAlarm.addListener(function(alarm){
    start();
});
将setTimeout函数替换为以下行

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

希望这有帮助

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

注意到

事件页面空闲一小段时间(几秒钟)后 已调度runtime.onSuspend事件。“事件”页面还有一些内容 在强制卸载此事件之前处理此事件的秒数

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


表示使用for事件页面,而不是
setTimeout

耶!!完全正确做得好!一旦我有了足够的声誉,我会对此投赞成票。非常感谢,伙计。