Unable to check runtime.lastError during browserAction.setBadgeText

前端 未结 3 425
眼角桃花
眼角桃花 2020-12-11 22:45

chrome.browserAction.setBadgeText(object details) is used to set the badge text for a chrome extension. However, if the tabId doesn\'t exist, Chrome produces the following e

相关标签:
3条回答
  • 2020-12-11 23:16

    A bug was reported for this issue and has been marked as fixed: https://crbug.com/451320

    0 讨论(0)
  • 2020-12-11 23:23

    An option would be to call chrome.tabs.get first and if no error is called assume that the tab will exist for the next few milliseconds.

    var tabId = 5000;
    function callback(tab) {
        if (chrome.runtime.lastError) {
            console.log(chrome.runtime.lastError.message);
        } else {
            chrome.browserAction.setBadgeText({
                text: 'text',
                tabId: tabId
            });
        }
    }
    chrome.tabs.get(tabId, callback);
    

    There is of course always a chance the tab could get closed between tabs.get finishing and setBadgeText getting called but it's very unlikely.

    0 讨论(0)
  • 2020-12-11 23:25

    In addition to chrome.tabs.get() as described above, you can also piggyback off an existing browserAction method that accepts a callback to catch for errors. Example:

    var tabId = 5000;
    chrome.browserAction.getTitle({tabId: tabId}, function(result) {
      if (chrome.runtime.lastError) return;
      // The coast is clear...
      chrome.browserAction.setBadgeText({
        text: 'text',
        tabId: tabId
      });
    });
    

    Good news: chrome.browserAction.setBadgeText() should also support a callback function like chrome.browserAction.getTitle() starting with Chrome 67 according to one source. Fingers crossed!

    0 讨论(0)
提交回复
热议问题