如何将chrome.action.setBadgeText从标签页特定模式切换回全局模式?
如何将Chrome扩展的标签页特定徽章切换回全局模式?
当调用chrome.action.setBadgeText()时,不带tabId参数会设置全局徽章文本,带tabId则设置标签页特定徽章文本。但一旦为某个标签页设置过特定徽章后,再调用全局方法就无法修改该标签页的徽章了。
示例代码:
chrome.action.setBadgeText({ text: "tab specific", tabId: '当前标签页ID' }); chrome.action.setBadgeText({ text: "global" }); // 这行对该标签页无效,因为之前设置过特定徽章 chrome.action.setBadgeText({ text: "change", tabId: '当前标签页ID' }); // 这行有效,但我的项目里不能这么用
请问有没有办法退出标签页特定模式,让该标签页重新使用全局徽章文本?
有办法解决这个问题,你只需要清除该标签页的特定徽章设置,之后全局设置就会对它生效了。具体做法是调用chrome.action.setBadgeText()时,给目标tabId传入text: ""(空字符串):
// 清除目标标签页的特定徽章 chrome.action.setBadgeText({ text: "", tabId: '当前标签页ID' }); // 现在全局设置就能生效了 chrome.action.setBadgeText({ text: "global" });
原理很简单:当标签页存在特定徽章设置时,Chrome会优先使用这个特定值,忽略全局设置。清空特定徽章后,Chrome就会自动 fallback 到全局的徽章文本。
如果需要批量处理多个标签页,可以先通过chrome.tabs.query()获取所有相关标签页,再逐个清空它们的特定徽章:
// 获取所有已打开的标签页 chrome.tabs.query({}, (tabs) => { tabs.forEach(tab => { // 清空每个标签页的特定徽章 chrome.action.setBadgeText({ text: "", tabId: tab.id }); }); }); // 之后设置全局徽章 chrome.action.setBadgeText({ text: "global" });
内容的提问来源于stack exchange,提问作者cr..
相关产品推荐
相关产品推荐

