Расширение Chrome Последовательный прослушиватель новых страниц

#google-chrome-extension

Вопрос:

У меня есть 6 способов отслеживания новой страницы, но все они терпят неудачу различными способами. Мне нужно, чтобы он вызывал функцию 1 раз на новой странице. Но для этого нужно сделать именно это;

  1. На новой вкладке
  2. На дублированной вкладке
  3. Переход из chrome://настройки в URL-адрес
  4. При обновлении
  5. Когда вы не обновляетесь, но переходите по тому же URL-адресу(например, щелкаете значок YouTube в левом верхнем углу, уже находясь на домашней странице)
  6. Работайте независимо от других вкладок. (прокомментированное «иначе, если» должно предотвратить проблемы, если у вас есть 2 вкладки на одном URL-адресе, но блок «если» вызывается несколько раз, и это прокомментированное «иначе, если» запускается после предыдущей итерации в блоке if)
 //background.js 
var url = "";
var id = "";
var bool = true;
//A
chrome.webNavigation.onHistoryStateUpdated.addListener(function(details) {
    if(details.frameId === 0) {
        chrome.tabs.get(details.tabId, function(tab) {
            if(tab.url === details.url) {
                console.log(tab.url, "onHistoryStateUpdated");
            }
        });
    }
});

//B
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(bool){
        console.log(tab.url, "Timeout Updated");
        bool = false;
        setTimeout(() => {bool = true;}, 280);
    }
});

//C 1
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
    if(url != tab.url){
        console.log(tab.url, "onUpdated");
        url = tab.url;
        id = tabId;
    }
    //C 2
    /*
    else if (id != tabId || id == ""){
        console.log(tab.url, "onUpdated id", id);
        id = tabId;
    }
    else{
    console.log('canceld update')
    }*/
});

//D
chrome.webNavigation.onCompleted.addListener(function onComplete() {
    console.log("webNavigation");
});

//E
chrome.webNavigation.onCommitted.addListener(function onComplete2() {
    console.log("webNavigation onCommitted");
});

//manifest
{
  "name": "Tab Updater",
  "version": "1",
  "manifest_version": 2,
  "background": {
    "scripts":["background.js"]
  },
  "permissions": [
    "tabs", "webNavigation"
  ]
}