2015-04-05 70 views
0

我想顯示一個通知,用戶可以在page action的形式下始終保持可見狀態,直到用戶執行某些操作。我現在正在使用此代碼:持久性頁面動作圖標

chrome.tabs.getSelected(null, function (tab) { 
    chrome.pageAction.show(tab.id); 
}); 

但是,只有在加載擴展時,纔會在活動選項卡上創建頁面操作圖標。相反,我希望圖標始終顯示,無論用戶在哪個頁面或標籤頁上。當用戶做出處理通知所需的內容時,它也需要消失。

我在想兩個想法。首先是循環瀏覽併爲每個選項卡添加一個頁面動作,然後掛鉤新選項卡和導航事件並將其添加到每個選項卡。我的第二個想法是鉤住活動的選項卡更改事件並將其添加到活動選項卡,然後在更改選項卡時將其從前一選項卡中刪除。

但我認爲還是可能有更好的方法,我沒有想到或不知道。那麼完成這個最好的方法是什麼?

回答

1

根據documentation,頁面操作應該只用於單個頁面。如果您想要在所有頁面上顯示某些內容,則應使用browserAction

或者,您可以在權限中嘗試設置"<all_urls>",但是我沒有測試它是否真正起作用。

+0

該文檔頁面說'如果您想要創建一個不總是可見的圖標,請使用頁面操作而不是瀏覽器操作。'這給我留下了使用頁面操作的唯一選擇。我還應該提到這是作爲[背景](https://developer.chrome.com/extensions/background_pages)腳本運行的。 – Keavon 2015-04-05 06:51:07

2

如果您想要收到選項卡更改的通知,則需要掛接到onActivated事件。

但是,這還不夠,因爲頁面操作將在導航時重置。所以您需要勾選幾乎每個tabs API事件以確保您的邏輯。另外,想想之後需要的清理。

那真的是確實對於一個頁面動作來說看起來很糟糕。還有一個重要的考慮因素是,這個UI元素沒有被典型用戶與需要注意的事物相關聯。你有沒有考慮過使用通知?

您可以使用chrome.notifications豐富的通知加上priority trick,或只是web notifications。在任何情況下,它都會以適合於「需要注意的事情」的方式顯示給用戶。然後,您可以掛鉤其onclick事件。

如果你確實想要一個按鈕,browserAction是完全合適的。您可以動態更改圖片,向圖標添加文本徽章以吸引注意力,或者只是在無所事事的情況下簡單地禁用按鈕(不隱藏,但灰色)。