8

我正在尝试制作一些 Google Chrome 扩展,我想记住最近删除的标签信息。但我有一个问题。每次我用该方法得到删除的标签信息,如 URL、标题等chrome.tabs.get,但有一个错误说'Error during tabs.get: No tab with id'

我认为这是因为在 tabs.get 方法获取标签信息之前标签已被删除。但是我怎样才能获得最近删除的标签 URL?

这是我的代码:

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

1 回答 1

16

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类型都包含原始值(布尔值、整数和字符串),因此存储tab对象不会导致严重的内存消耗。
但这些属性可能不准确,因为onUpdated仅在页面(重新)加载时触发。如果其他属性是相关的,请确保您还将事件侦听器绑定到其他chrome.tab事件

于 2012-09-01T14:29:06.133 回答