2011-07-19 114 views
0

我正在嘗試編寫一個需要保持腳本將在其中執行的每個選項卡狀態的Chrome擴展。 我的第一個想法是在背景頁面中有一張地圖,它將當前標籤ID與標籤的狀態相關聯。如何保持鉻擴展中的選項卡的狀態

我剛剛看到chome.tabs.getCurrent方法不能用於獲取執行內容腳本的頁面的標籤ID。 我看到經常推薦使用chrome.tabs.getSelected方法,但我不能使用此方法,因爲我的腳本可以在後臺調用(例如,自動重新加載頁面時),然後可以不選擇該選項卡。

所以我知道如何獲得當前標籤的id或如何保持標籤的狀態。

+0

你這是什麼意味着製表符狀態,它的網址?您需要更詳細地描述您準備運行此腳本的時間以及您試圖保存的內容。 – serg

+0

我想做一個像IMacro一樣的擴展。目標是自動執行場景。在某些情況下,我需要維護一個計數器,並且這個計數器需要在頁面之間獨立。 – Mobius

+0

所以你只需要一個標籤ID?哪個選項卡適用於當前窗口中的一個或全部選項卡?你什麼時候需要它,在任何時候或當用戶點擊某個地方的東西時? – serg

回答

1

事實上,我只需要訪問sender.tab.id

腳本在backgroung頁:

var states = new Object(); 
chrome.extension.onRequest.addListener(
    function(request, sender, sendResponse) { 
    if(request.method == "setState") { 
     states[sender.tab.id] = request.state; 
     sendResponse({}); 
    } else if(request.method == "getState") { 
     var state = states[sender.tab.id]; 
     sendResponse(state); 
    } else { 
     sendResponse({}); // snub them. 
    } 
    }); 

和代碼,我需要的內容腳本:

function saveState(state) { 
    chrome.extension.sendRequest({method: "setState", state: state}, function() {}); 
} 

function restoreState() { 
    chrome.extension.sendRequest({method: "getState"}, doTheJob); 
} 

function doTheJob(state) { 
    // do the job 
    console.log(state); 

    var newState; 
    if(state==undefined || state==null) { 
    newState = { count: 1 }; 
    } else { 
    newState = state; 
    newState.count++; 
    } 
    saveState(newState); 
} 

restoreState(); 
相關問題