#google-chrome-extension
Вопрос:
У меня есть 6 способов отслеживания новой страницы, но все они терпят неудачу различными способами. Мне нужно, чтобы он вызывал функцию 1 раз на новой странице. Но для этого нужно сделать именно это;
- На новой вкладке
- На дублированной вкладке
- Переход из chrome://настройки в URL-адрес
- При обновлении
- Когда вы не обновляетесь, но переходите по тому же URL-адресу(например, щелкаете значок YouTube в левом верхнем углу, уже находясь на домашней странице)
- Работайте независимо от других вкладок. (прокомментированное «иначе, если» должно предотвратить проблемы, если у вас есть 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"
]
}