2013-08-30 29 views
3

我有一個實現瀏覽器動作的擴展。 當然,瀏覽器的行爲總是可見的,但它在某些URL中具有特殊意義。所以,我用過濾的事件來聽這些URL,並設置適當的徽章很酷的方式來重置瀏覽器動作徽章?

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

有一些「貴人」的方式,當用戶從該頁面導航了,不聽每一個標籤導航,重置徽章? 我應該執行一個內容腳本來掛在某個正在退出的事件併發送消息嗎?

非常感謝你,

回答

2

在我看來,一個好的解決辦法是使用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

「避免收聽每一個標籤導航」的一個很好的理由是因爲它使[事件頁面](https://developer.chrome.com/extensions/event_pages.html)更加有效。如果一個事件一直被觸發,那麼在[背景頁面]上使用事件頁面幾乎沒有意義(https://developer.chrome.com/extensions/background_pages.html)。 –

+0

Rob是對的,這就是精神。但我認爲Boucher的回答是一種告訴我沒有這種方式的方法:)我正在考慮使用window.unbeforeunload = function(){chrome.runtime.sendMessage('unloading')}來執行一個內容腳本。 –

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會顯示在瀏覽器上操作按鈕的徽章,只有當該標籤在窗口的活動標籤。當用戶在該選項卡中導航時,其文本將重置爲「」。不需要特殊的操作來重置它。

+0

我試圖做到這一點,但它似乎並沒有工作。我必須錯過一些東西,但Google的文檔沒有解釋如何充分使用TabId參數。 –

相關問題