javascript – 如何构建我的应用程序以在网站上运行时使用localStorage,以及在作为Chrome应用程序运行时使用chrome.storage?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了javascript – 如何构建我的应用程序以在网站上运行时使用localStorage,以及在作为Chrome应用程序运行时使用chrome.storage?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含3866字,纯文字阅读大概需要6分钟。
内容图文
![javascript – 如何构建我的应用程序以在网站上运行时使用localStorage,以及在作为Chrome应用程序运行时使用chrome.storage?](/upload/InfoBanner/zyjiaocheng/808/a266fa4f48bb4083bc249104714fc202.jpg)
我有a simple web应用程序我已经构建了使用localStorage将一组任务保存为字符串化的JSON.它也是Chrome网上应用店的Chrome extension,扩展名和http://supersimpletasks.com在VPS上运行的网站的代码库完全相同.
我想将我的扩展程序迁移到Chrome App,这样我就可以访问chrome.storage.sync API,它允许我的用户跨设备进行任务同步.如果我想存储超过5mb的数据,那么使用chrome.storage还会给我更大的灵活性.
但是,当我的应用程序从supersimpletasks.com提供时,chrome.storage将无法工作 – 我需要使用localStorage.
据我所知,localStorage是同步的,chrome.storage是异步的,这意味着对下面的方法进行了大量的重写.这两种方法负责从localStorage检索任务和保存任务.
@getAllTasks: ->
allTasks = localStorage.getItem(DB.db_key)
allTasks = JSON.parse(allTasks) || Arrays.default_data
allTasks
@setAllTasks: (allTasks) ->
localStorage.setItem(DB.db_key, JSON.stringify(allTasks))
Views.showTasks(allTasks)
如何根据环境构建我的应用程序以使用localStorage或chrome.storage?我可以遇到什么问题?
解决方法:
此问题的解决方案是创建自己的存储API.您已经确定localStorage是同步的,而Chrome存储是异步的,但这是一个容易解决的问题,只需简单地将所有内容视为异步即可.
创建自己的API,然后使用它代替所有其他调用.在代码中快速查找/替换可以使用新API替换localStorage调用.
function LocalStorageAsync() {
/**
* Parses a boolean from a string, or the boolean if an actual boolean argument is passed in.
*
* @param {String|Boolean} bool A string representation of a boolean value
* @return {Boolean} Returns a boolean value, if the string can be parsed as a bool.
*/
function parseBool(bool) {
if (typeof bool !== 'string' && typeof bool !== 'boolean')
throw new Error('bool is not of type boolean or string');
if (typeof bool == 'boolean') return bool;
return bool === 'true' ? true : false;
}
/**
* store the key value pair and fire the callback function.
*/
this.setItem = function(key, value, callback) {
if(chrome && chrome.storage) {
chrome.storage.local.set({key: key, value: value}, callback);
} else {
var type = typeof value;
var serializedValue = value;
if(type === 'object') {
serializedValue = JSON.stringify(value);
}
value = type + '::typeOf::' + serializedValue;
window.localStorage.setItem(key, value);
callback();
}
}
/**
* Get the item from storage and fire the callback.
*/
this.getItem = function(key, callback) {
if(chrome && chrome.storage) {
chrome.storage.local.get(key, callback);
} else {
var stronglyTypedValue = window.localStorage.getItem(key);
var type = stronglyTypedValue.split('::typeOf::')[0];
var valueAsString = stronglyTypedValue.split('::typeOf::')[1];
var value;
if(type === 'object') {
value = JSON.parse(valueAsString);
} else if(type === 'boolean') {
value = parseBool(valueAsString);
} else if(type === 'number') {
value = parseFloat(valueAsString);
} else if(type === 'string') {
value = valueAsString;
}
callback(value);
}
}
}
// usage example
l = new LocalStorageAsync();
l.setItem('test',[1,2,3], function() {console.log('test');});
l.getItem('test', function(e) { console.log(e);});
除了将所有内容视为异步之外,下面的解决方案克服的一个问题是,它还解释了localStorage将所有内容转换为字符串的事实.通过将类型信息保留为元数据,我们确保getItem操作产生的数据类型与进入的数据类型相同.
更重要的是,使用工厂模式的变体,您可以创建两个具体的内部子类,并根据环境返回适当的内部子类:
function LocalStorageAsync() {
var private = {};
private.LocalStorage = function() {
function parseBool(bool) {
if (typeof bool !== 'string' && typeof bool !== 'boolean')
throw new Error('bool is not of type boolean or string');
if (typeof bool == 'boolean') return bool;
return bool === 'true' ? true : false;
}
this.setItem = function(key, value, callback) { /* localStorage impl... */ };
this.getItem = function(key, callback) { /* ... */ };
};
private.ChromeStorage = function() {
this.setItem = function(key, value, callback) { /* chrome.storage impl... */ };
this.getItem = function(key, callback) { /* ... */ };
}
if(chrome && chrome.storage)
return new private.ChromeStorage();
else
return new private.LocalStorage();
};
内容总结
以上是互联网集市为您收集整理的javascript – 如何构建我的应用程序以在网站上运行时使用localStorage,以及在作为Chrome应用程序运行时使用chrome.storage?全部内容,希望文章能够帮你解决javascript – 如何构建我的应用程序以在网站上运行时使用localStorage,以及在作为Chrome应用程序运行时使用chrome.storage?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。