chrome扩展:从localstorage切换到chrome.storage.local

时间:2016-12-07 14:34:52

标签: javascript html html5 google-chrome google-chrome-extension

我终于得到了我在Firefox中按计划运行的第一个JS脚本。现在我需要切换到chrome.storage,否则它将无法在我的扩展程序中运行。

基本上我想更新HTML文件中的值,可以通过输入框中的输入来更改。

非常欢迎您在我的代码中选择,并告诉我什么是完全不正常的。但我对JS很新,我只是想让它发挥作用。由于这与localstorage一起工作,我想我必须让它与chrome存储一起工作。一旦我开始工作,就可以开始清理这个烂摊子了。先感谢您! (我试图解决这个问题,因为大约12个小时没有。无法掌握它。)

检查脚本时出现的错误:

Uncaught Error: Invocation of form get(string) doesn't match definition get(optional string or array or object keys, function callback)
    at normalizeArgumentsAndValidate (extensions::schemaUtils:112:11)
    at StorageArea.self.(anonymous function) [as get] (extensions::StorageArea:35:14)
    at chrome-extension://fcbadpjebgjnohhcihmkopdbnbjjmnod/initialize_id.js:5:26

options.html 这是"设置"文件,其中一个输入id应该是可更改的。

      </head>
  <body>
    <p>ENTER YOUR ID FROM tsindex.com BELOW</p>
      <form>
          <input id="ts_id_js_html" type="text" value="128856"></input>
          <br>
          <br>
          <button onclick="store()">Save/Load</button>
      </form> 

<script src="initialize_id.js"></script>
<script src="options.js"></script>
<script src="load_id.js"></script>
  </body>
</html>

options.js 这将存储chrome.storage.local中输入字段的给定ID(在localstorage之前)

function store(){
 var input_id = document.getElementById("ts_id_js_html").value;
 chrome.storage.local.set("ts_id_js", input_id);
}
如果chrome.storage.local未定义,则

initialize.js 执行一次X.否则它获取存储的值并替换字段中的输入。

var init_count;

if (chrome.storage.local.get("ts_id_js") === undefined && init_count == undefined) {
    init_count++; //ignore this for now
} else {
    document.getElementById("ts_id_js_html").value = chrome.storage.local.get("ts_id_js");
}

load_id_to_popup.js 当popup.html打开时会加载,并在必要的字段中输入给定的ID。

 document.getElementById('input_id').dataset.serverid =
 chrome.storage.local.get("ts_id_js");

IGNORE! load_id.js 这是当前的冗余,请忽略这一点。

 document.getElementById("ts_id_js_html").value =
 chrome.storage.local.get("ts_id_js");

1 个答案:

答案 0 :(得分:0)

chrome.storage.local.get是异步的,这是卑鄙的,Chrome会将值返回给回调函数:

chrome.storage.local.get("ts_id_js", function(obj) {
    let value = obj["ts_id_js"];
});