js插件store(本地存储)

来源:互联网 发布:美国知乎quora评价中国 编辑:程序博客网 时间:2024/05/23 21:39

store.js 是一个兼容所有浏览器的 LocalStorage 包装器,不需要借助 Cookie 或者 Flash。store.js 会根据浏览器自动选择使用 localStorage、globalStorage 或者 userData 来实现本地存储功能。


一 存储接口

通过 $.AMUI.store 调用。检测是否支持(开启) LocalStorage

 Copy
var store = $.AMUI.store;if (!store.enabled) {  alert('Local storage is not supported by your browser. Please disable "Private Mode", or upgrade to a modern browser.');  return;}var user = store.get('user');// ... and so on ...

Safari 的无痕浏览模式或者用户禁用了本地存储时,store.enabled 将返回 false

二 浏览器如何禁用 LocalStorage

  • Firefox: 地址栏输入 about:config, 将 dom.storage.enabled 的值设置为 false
  • Chrome: 设置 → 隐私设置 → 内容设置 → 阻止网站设置任何数据

三 接口列表

LocalStorage 受同源策略限制,以下操作仅限于同源下的数据。

  • store.set(key, val): 存储 key 的值为 val
  • store.get(key): 获取 key 的值;
  • store.remove(key): 移除 key 的记录;
  • store.clear(): 清空存储;
  • store.getAll(): 返回所有存储;
  • store.forEach(): 遍历所有存储。
 Copy
var store = $.AMUI.store;// 存储 'username' 的值为 'marcus'store.set('username', 'marcus')// 获取 'username'store.get('username')// 移除 'username' 字段store.remove('username')// 清除所有本地存储store.clear()// 存储对象 - 自动调用 JSON.stringifystore.set('user', { name: 'marcus', likes: 'javascript' })// 获取存储的对象 - 自动执行 JSON.parsevar user = store.get('user')alert(user.name + ' likes ' + user.likes)// 从所有存储中获取值store.getAll().user.name == 'marcus'// 遍历所有存储store.forEach(function(key, val) {  console.log(key, '==', val)})

四 浏览器支持

绝大多数浏览器(包括 IE 8)都原生支持 LocalStorage。

你的浏览器测试结果为:

second pass bad assert: getAll gets all 4 values

不同浏览器对本地存储单条记录的长度限定不同,具体可以通过以下链接测试:

  • Web Storage Support Test
  • Test of localStorage limits/quota

五 注意事项

原生方法与 store.js 的差异

使用原生方法操作:

 Copy
localStorage.myage = 24localStorage.myage !== 24 // truelocalStorage.myage === '24' // truelocalStorage.user = { name: 'marcus', likes: 'javascript' }localStorage.user === "[object Object]" // truelocalStorage.tags = ['javascript', 'localStorage', 'store.js']localStorage.tags.length === 32 // truelocalStorage.tags === "javascript,localStorage,store.js" // true

使用 store.js 序列化后的结果:

 Copy
store.set('myage', 24)store.get('myage') === 24 // truestore.set('user', { name: 'marcus', likes: 'javascript' })alert("Hi my name is " + store.get('user').name + "!") // 仍然返回对象store.set('tags', ['javascript', 'localStorage', 'store.js'])alert("We've got " + store.get('tags').length + " tags here") // 仍然返回数组


原创粉丝点击