Как установить BadgeText в расширении Chrome в зависимости от ответа JSON - PullRequest
0 голосов
/ 29 июня 2018

Я работаю над расширением 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/"
  ]
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...