gpt4 book ai didi

javascript - 在 browserAction.setBadgeText 期间无法检查 runtime.lastError

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:32:26 29 4
gpt4 key购买 nike

chrome.browserAction.setBadgeText(object details)用于设置 chrome 扩展的徽章文本。但是,如果 tabId 不存在,Chrome 会使用 console.error() 产生以下错误:

Unchecked runtime.lastError while running browserAction.setBadgeText: No tab with id: ####.

当在页面加载期间设置徽章文本时,这会成为一个问题。如果选项卡最初存在但被用户关闭,setBadgeText 最终会使用不存在的 tabId 进行调用。

通常,这可以通过检查有问题函数的回调参数中的 chrome.runtime.lastError 来防止 as was answered in another question .但是,由于 browserAction.setBadgeText() 没有回调参数,似乎没有办法避免错误。

tabId 是一个不代表任何选项卡的整数时,下面的代码仍然会产生错误,即使它试图...

  • try...catch 捕获错误 (因为 console.error() 没有被抛出所以它不起作用)
  • 在调用 setBadgeText 之后检查 lastError (因为该函数是异步的,所以不起作用)
  • 在调用 setBadgeText 之后使用各种 setTimeout 间隔来检查 lastError (这不起作用并且可能不可靠)
  • 将回调参数添加到 setBadgeText (由于没有第二个参数,chrome 在使用时会产生另一个错误,因此已将其注释掉)
var tabId = 5000;
function clearError () {
console.log(chrome.runtime.lastError);
}
try {
chrome.browserAction.setBadgeText({
text: 'text',
tabId: tabId
}/*, clearError*/);
clearError();
setTimeout(clearError, 0);
setTimeout(clearError, 50);
setTimeout(clearError, 500);
}
catch (e) {
console.log('Caught', e);
clearError();
}

是否有任何方法可以正确检查 chrome.runtime.lastError 以防止发生此错误?

最佳答案

一个选项是调用 chrome.tabs.get首先,如果没有调用错误,则假设该选项卡将在接下来的几毫秒内存在。

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);

当然,在 tabs.get 完成和 setBadgeText 被调用之间,选项卡总是有可能关闭,但这种可能性很小。

关于javascript - 在 browserAction.setBadgeText 期间无法检查 runtime.lastError,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32131089/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com