Chrome扩展程序setTimeout无法正常工作

时间:2014-10-24 00:43:16

标签: 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://*/*"
  ]
}

有什么可能导致这种奇怪的想法?我正在开发者模式BTW上测试它。

提前致谢!

修改

代码已修复:

的manifest.json

我在权限

中添加了“闹钟”

background.js

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

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

使用以下行替换setTimeout函数

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

希望这有帮助!

1 个答案:

答案 0 :(得分:16)

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

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

  

一旦事件页面空闲了很短的时间(几秒钟),就可以了   调度runtime.onSuspend事件。活动页面还有一些   在强行卸载之前处理此事件的秒数。

所以,在实际卸载页面之前,这可能会让你在13秒左右得到更多的东西(在onSuspend中给你一些清理时间,我估计)。然后卸载您的页面,并从那里启动代码不再运行。

https://developer.chrome.com/extensions/event_pages#transition表示要将alarms api用于事件页而不是setTimeout