rewriting localStorage javascript for chrome.local.set

rewriting localStorage javascript for chrome.local.set

本文关键字:local set chrome for localStorage javascript rewriting      更新时间:2023-09-26

我有这段代码,它正在使用localStorage html5调用。然而,它必须为Chrome桌面应用程序重写,我不知道如何将其移植过来。

window.fakeStorage = {
  _data: {},
  setItem: function (id, val) {
    return this._data[id] = String(val);
  },
  getItem: function (id) {
    return this._data.hasOwnProperty(id) ? this._data[id] : undefined;
  },
  removeItem: function (id) {
    return delete this._data[id];
  },
  clear: function () {
    return this._data = {};
  }
};
function LocalScoreManager() {
  this.key     = "bestScore";
  var supported = this.localStorageSupported();
  this.storage = supported ? window.localStorage : window.fakeStorage;
}
LocalScoreManager.prototype.localStorageSupported = function () {
  var testKey = "test";
  var storage = window.localStorage;
  try {
    storage.setItem(testKey, "1");
    storage.removeItem(testKey);
    return true;
  } catch (error) {
    return false;
  }
};
LocalScoreManager.prototype.get = function () {
  return this.storage.getItem(this.key) || 0;
};
LocalScoreManager.prototype.set = function (score) {
  this.storage.setItem(this.key, score);
};

我得到的错误是"window.localStorage在打包的应用程序中不可用。请使用chrome.storage.local。">

到目前为止,我重写它的尝试是这样的。。但它在途中的某个地方断裂了。

$(document).ready(function() {

$("body").bind('keyup', function() {
      var number = $(".best-container").val();
if(number == 'undefined'){
 var number = "0";
}
    chrome.storage.local.set({'bestScore': number});
});

chrome.storage.local.get('bestScore', function (result) {
     hello= result.bestScore || 0;
    $(".best-container").val(hello);
});

});

将localStorage移植到chrome.storage有一个重要的陷阱:chrome.store方法是异步的,而localStorage访问是同步的。

这意味着:如果你试图在调用set方法的回调之前从chrome.storage中获取一个值,那么这个值仍然是未定义的

错误的方式:

chrome.storage.local.set({'key': value});
...
chrome.storage.local.get('key', function(items) {
   if(items.key)         // won't be able to find the key
      alert(items.key);
});

正确方式:

chrome.storage.local.set({'key': value}, function() {
   ...
   chrome.storage.local.get('key', function(items) {
      if(items.key)
         alert(items.key); // will be "value"
   });
});

或者更确切地说:

chrome.storage.local.set({'key': value}, function() {
   doFurtherStuff();
});
function doFurtherStuff() {
   ...
   chrome.storage.local.get('key', function(items) {
      if(items.key)
         alert(items.key); // will be "value"
   });
}