Расширение Chrome — как постоянно проверять текущую вкладку?

#javascript #google-chrome-extension

#javascript #google-chrome-расширение

Вопрос:

Я пытаюсь запустить таймер на основе определенных URL-адресов и вывести сообщение при достижении предела. К сожалению, я смог использовать tabs.OnActivated и tabs.onUpdated только в background.js чтобы обновить мой таймер.

Это означает, что мой таймер не обновляется, находясь на одной из помеченных вкладок. Если я попытаюсь использовать цикл while в background.js это не работает.

Я добавил вызов функции в popup.js для этого обновляется время, но оно вызывается только тогда, когда у меня открыто всплывающее окно. Есть ли какие-либо прослушиватели, которые постоянно проверяют текущую вкладку, или есть совершенно другой способ сделать это, о котором я не думал?

Спасибо!

метод всплывающего окна:

 var myVar = setInterval(myTimer, 1000);

function myTimer() {
    var bgPage = chrome.extension.getBackgroundPage();
    var time = bgPage.updateTime();
    document.getElementById("clock").textContent = "TIME: "   time;
    if (chrome.extension.getBackgroundPage().limit == -1){
        document.getElementById("limit").textContent = "LIMIT: "   "N/A"
    }
    else{
        document.getElementById("limit").textContent = "LIMIT: "   bgPage.updateLimit();
    }
}
  

манифест:

 "background": {
      "scripts": ["format.js", "background.js"],
      "persistent": true
     },
  

Редактировать: добавлено в манифест

Комментарии:

1. Полная картина не ясна, поэтому я прокомментирую те части, которые я вижу. Всплывающее окно запускается только при отображении. Фоновый скрипт должен быть объявлен с "persistent":true (или вообще без «постоянной» записи), в противном случае он будет выгружен после 5 секунд бездействия. В таком постоянном скрипте вы можете использовать setTimeout где угодно. Нет прослушивателей, которые что-либо проверяют , поэтому вам нужно будет явно вызвать соответствующий API.

2. Извините, что не включил все, слушатели в моем фоновом режиме довольно большие. Я добавил в alarms API, чтобы они вызывались каждую секунду, но это отчасти противоречит его дизайну. Есть предложения?

3. Кроме того, у меня уже было persistent=true , мне просто нужна была какая-то постоянная проверка моих вкладок