问题描述
当我尝试从 chrome.tabs.onActivated
事件回调中获取标签信息时,当标签通过鼠标单击切换时,我得到 undefined
结果和错误消息
未选中的 runtime.lastError:现在无法编辑选项卡(用户可以 正在拖动标签)。
延迟 100 毫秒或使用 CTRL+TAB 切换选项卡,或者如果在窗口未聚焦时单击选项卡,它工作正常:
background.js
chrome.tabs.onActivated.addListener( info =>
{
chrome.tabs.get(info.tabId,tab => console.log("get",tab));
chrome.tabs.query({active: true,windowId: info.windowId},tab => console.log("query",tab));
chrome.tabs.getSelected(tab => console.log("getSelected",tab));
setTimeout(()=>
{
chrome.tabs.get(info.tabId,tab => console.log("setTimeout get",tab));
chrome.tabs.query({active: true,tab => console.log("setTimeout query",tab));
chrome.tabs.getSelected(tab => console.log("setTimeout getSelected",tab));
},100);
});
manifest.json
{
"background": {
"persistent": true,"scripts": [ "background.js" ]
},"description": "tab info within chrome.tabs.onActivated event","manifest_version": 2,"name": "test","permissions": [ "tabs" ],"version": "0.0.1"
}
在 Chrome 91.0.4472.77 64 位和 MS Edge 91.0.864.41 64 位中测试
解决方法
是的,这是一个错误:⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀⠀
https://bugs.chromium.org/p/chromium/issues/detail?id=1213925
解决方法是将 runtimeError
与 setTimeout
一起捕获
function tabsGet(id,callback)
{
const cb = tab => (chrome.runtime.lastError) ? setTimeout(e => chrome.tabs.get(id,cb)) : callback(tab);
chrome.tabs.get(id,cb);
}