簡體   English   中英

Chrome擴展程序setTimeout無法正常工作

[英]Chrome extension setTimeout not working properly

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

我正在構建一個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});

希望這可以幫助!

我懷疑問題可能是在一段時間不活動后自動暫停事件頁面。 在我的機器上, onSuspend似乎在~10秒后調用。

https://developer.chrome.com/extensions/event_pages#lifetime指出

一旦事件頁面空閑了很短的時間(幾秒鍾),就會調度runtime.onSuspend事件。 在強行卸載之前,事件頁面還有幾秒鍾來處理此事件。

所以,在頁面實際卸載之前,這可能會讓你在13秒左右得到更多的東西(在onSuspend中給你一些清理時間,我估計)。 然后卸載您的頁面並從那里啟動代碼不再運行。

https://developer.chrome.com/extensions/event_pages#transition表示使用事件頁面的警報api而不是setTimeout

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM