2011-07-28 4 views
0

私はすべてのブラウザ用の拡張機能を開発しています。セッションにタブ固有の値を保存するにはどうすればよいですか? FirefoxでNSISessionStoreオブジェクトを使ってこの問題を解決しました。 SafariとGoogle Chromeでは、私はSessionStorageを使いました。このオブジェクトは、特定のドメインの特定のタブの値を格納します。特定のタブの値を格納する方法の解決策が必要です。ChromeとSafari拡張機能の特定のタブの値を保存するにはどうすればよいですか?

+0

あなたがこれを言い換えるてくださいすることができ知りたい。 – Alasdair

答えて

0

タブの生涯を通してデータを管理する方法を尋ねる場合は、作成時にそのタブのオブジェクトを作成し、閉じたときに削除するだけです。

// Create data store 
var tabDataStore = {}; 
// Create listeners 
chrome.tabs.onCreated.addListener(function (tab) { 
    tabDataStore['tab_' + tab.id] = { 
     urls: [] 
    }; 
}); 
chrome.tabs.onRemoved.addListener(function (tabId) { 
    delete tabDataStore['tab_' + tabId]; 
}); 
// Save something against that tab's data 
function saveUrl(tab) { 
    tabDataStore['tab_' + tab.id].urls.push(tab.url); 
} 
// Load something from tab's data 
function loadOriginalUrl(tab) { 
    tabDataStore['tab_' + tab.id].urls[0]; 
} 

ただし、これはすべて前提であり、まったく異なるものが必要な場合があります。また、いつ、何を正確に保存するかによって異なります。

タブの詳細については、official documentationをご覧ください。

何かを保持したい場合は、localStorageを使用できます。

+0

このソリューションはChrome固有のものです。 – Brian

0

それを行うための簡単な方法は、ではないが、それは厄介になりますように理想的なは

タブのURLを使用すると、ハッシュに値を格納することができhttp://whatever.com/ だったと言うURLハッシュに値を格納することです以下のようなので、 http://whatever.com/#value1=12&value2=10&value3=15212

ウェブサイトは、そのような「ページ内の」アンカー、またはajaxyタイプのもの

0

サファリ回答

としてanyhtingのハッシュオブジェクトを使用している場合にも問題があるだろう

注入されたスクリプト

// global page 
safari.application.addEventListener("message", function(event){ 
    switch(event.name){ 
     case "saveData": 
      event.target.page.tabData = { data: myData } 
     break; 
     case "getData": 
      event.target.page.dispatchMessage("tabData", myData); 
     break; 
    } 
}, false); 

からのメッセージ上のインスタンスのための..だからタブに直接保存し、あなたのグローバルページで - それは実際に何を理解することは難しいよう

// injected page 

// first save data 
safari.self.tab.dispatchMessage("saveData", {firstname:"mike", age: 25}); 

// setup listner to recevie data 
safari.self.addEventListener("message", function(event){ 
    switch(event.name){ 
     case "tabData": 
      // get data for page 
      console.debug(event.message); 
      // { firstname: "mike", age: 25 } 
     break; 
    } 
}, false); 

// send message to trigger response 
safari.self.tab.dispatchMessage("getData", {}); 
関連する問題