很酷的方式重置浏览器动作徽章?

时间:2013-08-30 15:52:07

标签: google-chrome-extension

我有一个实现浏览器操作的扩展程序。 当然,浏览器操作总是可见的,但它在某些网址中具有特殊意义。因此,我使用过滤事件来收听这些网址并设置正确的徽章

chrome.webNavigation.onDOMContentLoaded.addListener(
    function(tab){
        chrome.browserAction.setBadgeText({
            text:'bdge',
            tabId: tab
        });
    },
    {'url':[{hostSuffix: 'somedomain.com', pathPrefix: 'somePath/'}]}
);

当用户从该页面导出时,是否有一些“优雅”的方式来重置徽章,而不会监听每个标签导航? 我应该执行内容脚本以挂起某些现有事件并发送消息吗?

非常感谢,

2 个答案:

答案 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才会在浏览器操作按钮上显示标记。当用户在该选项卡中导航时,其文本将重置为“'。无需特殊操作即可重置它。

相关问题