2011-07-19 15 views
0

私は、スクリプトが実行される各タブの状態を維持する必要があるクロムエクステンションを作成しようとしています。 私の最初のアイデアは、現在のタブIDをタブの状態に関連付けるマップをバックグラウンドページに持つことでした。クロムエクステンション内のタブの状態を保持する方法

コンテンツスクリプトを実行するページのタブIDを取得するのに、chome.tabs.getCurrentメソッドを使用できないことがわかりました。 私は、chrome.tabs.getSelectedメソッドが推奨されることがよくありますが、私のスクリプトはバックグラウンドで呼び出すことができます(たとえば、ページが自動的にリロードされたときなど)、タブを選択できないため、このメソッドを使用できません。

私は現在のタブのIDを取得する方法やタブの状態を保持する方法を知っている必要があります。

+0

あなたは何をすべきかタブの状態、そのURLの意味ですか?このスクリプトを正確に実行する予定があるときと、保存しようとしていることについて詳しく説明する必要があります。 – serg

+0

私はIMacroのような拡張機能を作りたいと思っています。目標は、シナリオの実行を自動化することです。場合によっては、カウンタを維持する必要があり、このカウンタはページ間で独立している必要があります。 – Mobius

+0

タブIDが必要ですか?どちらのタブは、現在のウィンドウの1つまたはすべてのタブ用ですか?必要なときはいつでも、ユーザーが何かをクリックするといつですか? – serg

答えて

1

実際には、私だけbackgroungページにsender.tab.id

スクリプトにアクセスする必要があります。

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(); 
関連する問題