2011-12-31 62 views
1

我正在嘗試爲Google Chrome創建一個簡單的插件。其中一個功能是返回到上次使用的選項卡,但我不知道如何去做。Chrome擴展程序:獲取上次使用的標籤

那麼,有沒有辦法得到最後使用的選項卡?

+0

如果您使用jQuery UI標籤...每個標籤都有其標識。你的系統是這種情況嗎?意思是一個選項卡有其獨特的ID? – samach 2011-12-31 15:28:10

+0

Chrome擁有自己的API,因此我可以選擇當前窗口中的所有選項卡(使用它們的ID,標題等)。 例如,我有彈出窗口(瀏覽器操作)與鏈接到某個頁面。關閉此頁面後(或幾秒鐘後),我想選擇用戶來自哪個標籤。 我需要的一切都是算法或函數來選擇(查找)上次使用的選項卡。 **更新:**我找到了[此擴展程序](https://chrome.google.com/webstore/detail/nikomkkhhpfoeamojhhgpfkpkdlfhfii),它可以完全符合我的要求,但我找不到那段代碼去做。 – Lorin 2011-12-31 15:40:28

回答

5

你可以嘗試添加一個勾入標籤的onSelected事件,只是保存該變量... soemthing這樣的:

var curTabID = 0; 
var curWinID = 0; 

chrome.tabs.onSelectionChanged.addListener(function(tabId, selectInfo) { 
    curTabID = tabId; 
    curWinID = selectInfo.windowId; 
}); 

然後你有窗口ID和標籤ID在任何時候。

+0

+1謝謝,這似乎很好。 – Lorin 2011-12-31 17:24:31

+1

嗯,我檢查了這個和功能chrome.tabs.onSelectionChanged返回新標籤的tabID,不舊。 例如,我有兩個選項卡 - 第一個(ID = 1)和第二個(ID = 2)。如果我將選擇從第一個選項卡更改爲第二個選項卡,我將得到ID 2不是1. – Lorin 2011-12-31 18:21:33

+0

確切地說是預期的,onSelectChanged會告訴你它何時更改,在此函數的開始時,curTabID將使用舊ID和tabId作爲新ID 。如果你想跟蹤所有的標籤和他們使用的順序,只需使用數組並推送()ID,而不是像我一樣設置它們。 – Hogan 2012-01-01 06:19:34

0

我認爲你應該使用chrome.windows.getCurrent函數來獲取當前窗口和chrome.tabs.query函數來獲取這個窗口中的活動標籤。

下面是一個例子(腳本從背景頁):

chrome.windows.getCurrent(
    function(win) { 
    // win is a Window object referencing the current window 
    chrome.tabs.query({'windowId': win.id, 'active': true}, 
     function(tabArray) { 
     // tabArray is a Tab Array referencing active tab(s) 
     } 
    ); 
    } 
); 
+0

注意:Hogan的代碼是基於事件的,而這個不是。 – 2011-12-31 17:26:12

+0

我認爲基於事件的代碼更好,因爲它在每次事件觸發後都會再次運行。問題是兩個代碼都會重新編號當前標籤。我需要從該標籤中選擇的標籤ID。 – Lorin 2011-12-31 18:24:35

+1

然後,您應該重新構思您的問題...... – 2012-01-01 11:49:53

2

說明:此答案對提問者無效,但我認爲這對於即將到來的Firefox開發人員可能有所幫助,因爲Firefox現在與Chrome共享相同的api。

Firefox webextension程序員不必跟蹤他們自己的標籤。他們可以查詢它像這樣反而,由於LastAccessed屬性:

chrome.tabs.query({ 
    active: false 
    }, (tabs) => { 
    let tab = tabs.reduce((previous, current) => { 
     return previous.lastAccessed > current.lastAccessed ? previous : current; 
    }); 
    // previous tab 
    console.log(tab); 
    }); 

編輯:值得一提的是,如果在後臺創建一個新的選項卡中的lastAcessed時間戳也被設置。所以這種方法並不完美,因爲在後臺打開的選項卡將被視爲最後訪問的選項卡。