我有一个实现浏览器操作的扩展程序。 当然,浏览器操作总是可见的,但它在某些网址中具有特殊意义。因此,我使用过滤事件来收听这些网址并设置正确的徽章
chrome.webNavigation.onDOMContentLoaded.addListener(
function(tab){
chrome.browserAction.setBadgeText({
text:'bdge',
tabId: tab
});
},
{'url':[{hostSuffix: 'somedomain.com', pathPrefix: 'somePath/'}]}
);
当用户从该页面导出时,是否有一些“优雅”的方式来重置徽章,而不会监听每个标签导航? 我应该执行内容脚本以挂起某些现有事件并发送消息吗?
非常感谢,
答案 0 :(得分:3)
在我看来,一个好的解决方案是使用chrome.tabs.onUpdated
。
在你的背景页面中,你会有类似的东西:
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) {
// using a regex or however else you want to test the URL
if (/somedomain\.com\/somePath\//.test(changeInfo.url)) {
chrome.browserAction.setBadgeText({
text: 'bdge',
tabId: tabId
});
} else {
chrome.browserAction.setBadgeText({
text: '',
tabId: tabId
});
}
});
我知道你写过“没有收听每一个标签导航”,但我不确定你为什么要避免这种情况。
答案 1 :(得分:2)
这是文档没有告诉您的内容:Chrome实际上会在用户导航时自动重置徽章。
仅将浏览器操作徽章设置为特定选项卡,例如
chrome.browserAction.setBadgeText({
text: 'ABCD', // My badge's text should be only 4 characters long
tabId: 1234 // Any tab, ussually a var here, not a constant
});
只有当该标签位于窗口中的有效标签页时,Chrome才会在浏览器操作按钮上显示标记。当用户在该选项卡中导航时,其文本将重置为“'。无需特殊操作即可重置它。