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 に答える