2012-09-01 88 views
4

我正在嘗試製作一些谷歌瀏覽器擴展程序 我想記住最近刪除的標籤信息。但是我遇到了問題。 每次我用chrome.tabs.get這個方法得到URL,標題等等去掉的標籤信息,但是有一個錯誤說的是'Error during tabs.get: No tab with id'如何獲取已刪除的標籤Chrome擴展程序中的網址開發

我認爲這是因爲在tabs.get方法獲取標籤信息之前,標籤已經被刪除。 但我怎樣才能得到最近刪除標籤網址?

這是我的代碼:

chrome.tabs.onRemoved.addListener(getRemovedTabs); 
function getRemovedTabs(tabId, removeInfo) { 
    chrome.tabs.get(tabId, function (tab) { 
     //do stuffs 
    }); 
} 

回答

9

當標籤是刪除,而不是在「它即將獲得刪除」時,會觸發事件chrome.tabs.onRemoved。刪除後無法獲取有關某個標籤的信息。

在刪除標籤之前必須收集信息。該chrome.tabs.onUpdated事件是最方便的事件是:

// Background script 
var tabToUrl = {}; 
chrome.tabs.onUpdated.addListener(function(tabId, changeInfo, tab) { 
    // Note: this event is fired twice: 
    // Once with `changeInfo.status` = "loading" and another time with "complete" 
    tabToUrl[tabId] = tab.url; 
}); 

chrome.tabs.onRemoved.addListener(function(tabId, removeInfo) { 
    do_stuff_with(tabToUrl[tabId]); 

    // Remove information for non-existent tab 
    delete tabToUrl[tabId]; 
}); 

很顯然,你不侷限於僅存儲在tabToUrl對象的URL。每個tab類型都包含原始值(布爾值,整數和字符串),因此存儲對象不會導致嚴重的內存消耗。
雖然屬性可能不準確,因爲onUpdated僅在頁面(重新)加載時纔會觸發。如果其他屬性相關,請確保您還將事件偵聽器綁定到other chrome.tab events

相關問題