Я работаю над расширением Chrome, где мне нужно установить текст значка в зависимости от ответа JSON, который варьируется от URL к URL. Текст значка будет равен длине массива, возвращаемого ответом JSON. Я хочу, чтобы текст значка обновлялся, как только активная вкладка загружает веб-сайт. В настоящее время мой код обновляет текст значка только после нажатия на значок расширения. Вот мой код:
background.js
chrome.webNavigation.onCommitted.addListener(function(tabId, changeInfo, tab) {
chrome.tabs.query({active: true, currentWindow: true}, function(tabs) {
tabUrl = tabs[0].url;
checkStatus(function(length){
if(length>0){
chrome.browserAction.setBadgeBackgroundColor({ color: 'blue' });
chrome.browserAction.setIcon({
path : "icons/icon2.png"
});
chrome.browserAction.setBadgeText({text: length.toString() });
} else {
chrome.browserAction.setIcon({
path :
"icons/icon1.png"
});
chrome.browserAction.setBadgeText({text: "" });
}
});
});
});
function checkStatus(callbacks){
var xhttp = new XMLHttpRequest();
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
var myObj = JSON.parse(this.responseText);//parsing the JSON response to javascript object
length = myObj.length;
callbacks(length);
};
}
xhttp.open("GET", "https://example.com/?url=" + tabUrl + "&type=json", true);
xhttp.send();
}
Я попытался отправить сообщение из content-script
, script.js, а затем обновил текст значка в background.js при его получении через chrome.runtime.onMessage
, но это не удалось, поскольку у меня уже было сообщение, отправленное из background.js. в script.js.
Многие расширения используют текст значка таким способом. Предложите какой-нибудь способ решить это.
manifest.json
{
"manifest_version": 2,
"name": "foo",
"description": "xyz",
"version": "1.0",
"browser_action": {
"default_icon": "icons/icon1",
"default_title": "Title"
},
"web_accessible_resources": [
"popup.html", "frame.html"
],
"background": {
"scripts": ["background.js"]
},
"content_scripts": [
{
"run_at": "document_end",
"matches": ["*://*/*"],
"js": ["script.js"]
}
],
"permissions": [
"activeTab",
"storage",
"webNavigation",
"tabs",
"https://foo.com/"
]
}