В моем расширении у меня есть background.js
onUpdated
слушатель, который вытягивает некоторые данные с XHR
и XPath
в badgeText
.
Но, если я активировал старую вкладку без чтобы что-то сделать в нем, просто нажмите на его вкладку в панели вкладок, onUpdated
не запускается, и у меня есть данные значка из ранее открытой вкладки.
Подобное происходит со старыми вкладками, которые были discarded
. Если я нажимаю на их вкладки в панели вкладок (опять же, ничего не делая), onUpdated
не срабатывает.
Похоже, что onUpdated
не охватывает активацию вкладки.
Как я могу одновременно использовать onUpdated
и onActivated
для освещения описанных мной событий? Или есть какой-то другой способ поймать событие вкладки, где я просто нажимаю на вкладку в панели вкладок?
Я хочу связать свои действия XHR
и setBadgeText
с onUpdated
и onActivated
, поэтому простой щелчок по вкладке в панели вкладок также становится триггером. В другом случае я должен заставить пользователей моего расширения вручную обновлять sh страницы для получения новых данных.
PS : это background.js
var currentDomain = "";
var currentHost = "";
var currentFullpath = "";
var currentUrl = "";
var currentFolder = "";
var badgeText = "";
chrome.tabs.onUpdated.addListener(function(tabid, changeInfo, tab){
chrome.tabs.query({'active' : true, 'currentWindow': true}, function(tabs){
if( ! (tabs.length == 0)){
let newUrl = new URL(tabs[0].url);
currentHost = newUrl.host;
currentUrl = tabs[0].url;
currentFullpath = currentUrl.substring(0, currentUrl.lastIndexOf("/"));
currentFolder = currentUrl.split("/");
parsed = psl.parse(currentHost);
currentDomain = parsed.domain;
chrome.storage.sync.get('savedApi', ({savedApi}) => {
console.log("savedApi: "+savedApi);
if(savedApi == null)
savedApi = 'de';
if(currentDomain == null)
return false;
if(currentUrl == null)
return false;
var xhr = new XMLHttpRequest();
var protocol = "https://";
var middle = ".myservice.com/seo/__loadModule/domain/"
var end = "/mobile/1/_action/_data_visindex_normal/";
console.log("xhr: "+xhr);
xhr.open("GET", protocol+savedApi+middle+currentDomain+end, true);
xhr.responseType='document';
xhr.onreadystatechange = function() {
if (this.readyState == 4) {
function getElementByXpath(path) {
return xhr.response.evaluate(path, xhr.response, null, XPathResult.STRING_TYPE, null).stringValue;
}
badgeText = getElementByXpath("normalize-space(//div[@class='data']/span[@class='value']/text())");
console.log("newUrl: "+newUrl);
console.log("currentHost: "+currentHost);
console.log("currentUrl: "+currentUrl);
console.log("currentFullpath: "+currentFullpath);
console.log("currentFolder: "+currentFolder);
console.log("currentDomain: "+currentDomain);
chrome.browserAction.setTitle({title: "Mobile visibility of "+currentDomain+" is "+ String(badgeText)});
chrome.browserAction.setBadgeText({text: String(badgeText)});
chrome.browserAction.setBadgeBackgroundColor({ color: '#1d2554' });
}
}
xhr.send();
})
}
})
})