使用chrome.storage API

时间:2016-06-04 19:17:10

标签: google-chrome-app sql.js

我在我的chrome应用程序中使用SQL.js for SQLite,我正在加载外部db文件来执行查询,现在我想将我的更改保存到本地存储以使其持久化,它已在此处定义 -

https://github.com/kripken/sql.js/wiki/Persisting-a-Modified-Database

我的使用方法与文章中定义的相同 -

function toBinString (arr) {
    var uarr = new Uint8Array(arr);
    var strings = [], chunksize = 0xffff;
    // There is a maximum stack size. We cannot call String.fromCharCode with as many arguments as we want
    for (var i=0; i*chunksize < uarr.length; i++){
        strings.push(String.fromCharCode.apply(null, uarr.subarray(i*chunksize, (i+1)*chunksize)));
    }
    return strings.join('');
}

function toBinArray (str) {
    var l = str.length,
            arr = new Uint8Array(l);
    for (var i=0; i<l; i++) arr[i] = str.charCodeAt(i);
    return arr;
}

将数据保存到存储 -

var data =toBinString(db.export());
chrome.storage.local.set({"localDB":data});

并从存储中获取数据 -

chrome.storage.local.get('localDB', function(res) {
    var data = toBinArray(res.localDB);
      //sample example usage
      db = new SQL.Database(data);
      var result = db.exec("SELECT * FROM user");
});

现在,当我进行查询时,我收到此错误 -

  

错误:文件已加密或不是数据库

在chrome.storage和localStorage中存储值有什么不同吗?因为它使用localStorage工作正常,在这里找到工作示例 -

http://kripken.github.io/sql.js/examples/persistent.html

这里的文件建议 - https://developer.chrome.com/apps/storage

我们不需要在chrome.storage API中使用stringify和parse,与localStorage不同,我们可以直接保存对象和数组。

当我尝试从db.export保存结果返回而没有任何转换时,我收到此错误 -

  

无法将值序列化为JSON

那么请帮助我们,在chrome的存储中保存数据库导出的方法是什么,我有什么问题吗?

0 个答案:

没有答案