为何MV3扩展中chrome.tabs.create设active:false在移动Chromium仍激活新标签?
移动Chromium扩展后台打开标签被强制前台激活的解决办法
问题根源
像Kiwi这类支持扩展的移动Chromium浏览器,对chrome.tabs.create的active: false参数兼容性不佳,会强制将新创建的标签切换为前台激活状态,和桌面Chrome的行为不一致。
可行解决方案
通过先记录当前激活标签ID,创建新标签后重新激活原标签的方式绕过这个限制,具体代码如下:
// 获取当前处于激活状态的标签 chrome.tabs.query({active: true, currentWindow: true}, (tabs) => { const originalTabId = tabs[0].id; // 创建目标标签(即使被强制激活,后续再切回原标签) chrome.tabs.create({url, active: false, pinned: false}, () => { // 重新激活原来的标签,恢复焦点 chrome.tabs.update(originalTabId, {active: true}); }); });
说明
- 这种方式利用API执行顺序,先完成新标签创建(可能短暂切换到前台),但立即将原标签设为激活状态,用户几乎不会察觉到焦点变化。
- 正常场景下当前激活标签必然存在,无需额外处理
originalTabId为空的情况,若需兼容极端场景可添加判断。
备选方案(针对部分特殊浏览器)
如果上述方法仍有问题,可尝试通过窗口聚焦状态来恢复原页面:
chrome.windows.getCurrent((currentWindow) => { chrome.tabs.create({url, active: false}, () => { chrome.windows.update(currentWindow.id, {focused: true}); }); });
内容的提问来源于stack exchange,提问作者Patryk
相关产品推荐
相关产品推荐

