chrome拡張の開発で設定データを保存する


chrome拡張でデータを保存する方法としては2つあり
html5のlocatStorageを使う方法とchrome extentionのAPIであるchrome.storageを使う方法がある。

html5のlocatStorageを使う方法は、普通にlocalStorageを使うだけなので簡単だが、サイトで使用している場合にデータが被ると嫌なので、chrome.storageの方を使ってみた。

注意点としてはコールバックとして関数が提供されていること
chrome.storage.sync.getのコールバック中に
chrome.storage.sync.setを書くようにしないとならないので、
ネストが1段深くなる。

単純にchrome.storage.sync.get、setを並べて書くとgetするのに時間が掛かる為、先にsetが実行される

chrome.storage.sync.get(['dateStrings'],function(items){
  var dateStrings;
  dateStrings = items.dateStrings;

  // スクリプト実行時間を取得する
  date = new Date();
  var year    = date.getFullYear();
  var month   = date.getMonth() + 1;
  var day     = date.getDate();
  var hours   = date.getHours();
  var minutes = date.getMinutes();
  var seconds = date.getSeconds();
  dateStrings =
	year + "/" + 
	("0"+month  ).slice(-2) + "/" + 
	("0"+day    ).slice(-2) + " " + 
	("0"+hours  ).slice(-2) + ":" + 
	("0"+minutes).slice(-2) + ":" + 
	("0"+seconds).slice(-2);

  items = {
	dateStrings : dateStrings
  }
  chrome.storage.sync.set(items, function(){});
});

追記

chrome.storageはバイナリは保存できない。
object型も保存できたので、できるかなと思ったけどできなかった。
set時エラーは特に発生しないが、中身が空のObject{}型に変換されてデータが壊れる。
この場合はchrome.filesystemに保存した方がいい??