Ano*_*ous 3 javascript google-chrome google-chrome-extension
chrome.browserAction.setBadgeText(object details)用于设置Chrome扩展程序的徽章文本.但是,如果tabId不存在,Chrome会使用以下错误产生以下错误console.error():
运行browserAction.setBadgeText时未经检查的runtime.lastError:没有带id的选项卡:####.
在页面加载期间设置徽章文本时,这会成为问题.如果选项卡最初存在但被用户关闭,则setBadgeText最终使用不存在的选项进行调用tabId.
通常,这可以通过检查chrome.runtime.lastError问题函数的回调参数来防止,如另一个问题所回答的那样.但是,由于browserAction.setBadgeText()没有回调参数,似乎无法阻止错误.
如果tabId是不表示任何选项卡的整数,则以下代码仍会产生错误,即使它尝试...
try...catch (由于console.error()没有抛出,它不起作用).lastError调用后检查setBadgeText (由于函数是异步的,因此不起作用).setTimeout间隔进行检查(这不起作用,可能不可靠).lastErrorsetBadgeText 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();
}
Run Code Online (Sandbox Code Playgroud)
有没有办法正确检查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);
Run Code Online (Sandbox Code Playgroud)
当然总是有可能在tabs.get完成和setBadgeText被叫之间关闭标签,但这是不太可能的.
| 归档时间: |
|
| 查看次数: |
447 次 |
| 最近记录: |