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

我正在构建一个 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 文件

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

背景.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 注意到



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

https://developer.chrome.com/extensions/event_pages#transition 表示对事件页面使用 alarms api 而不是 setTimeout

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

10-16 15:01
查看更多