用于浏览器本地存储的js插件 - jStorage
简介
jStorage是一个跨浏览器的将key-value类型的数据存储到浏览器本地存储的js插件——jStorage支持所有主流浏览器,PC机(甚至包括是IE6)和移动终端均可用。此外,jStorage的实现不依赖任何其它js库(库无关),它和其他js库(Query, Prototype, MooTools等)有良好的兼容性。但是为了让它能够支持老版本的IE(比如蛋疼的IE6),需要依赖第三方库(Prototype, MooTools)或JSON2。
jStorage支持存储Strings,Numbers,JavaScript对象,Arrays,甚至是原生XML节点。 jStorage还支持设置TTL(Time to Live, 生存时间)类型的值用于自动到期存储的keys。最重要的是(也是attractive的) - 当浏览器页签中某个key值变更时或者订阅/发布事件以通知其他标签/窗口的能力。这使得jStorage能够成为Web应用程序本地PubSub(publish/subscribe)平台。
jStorage非常小,min压缩后只有7kb,zip打包后只有4kb。
索引
- 基本信息
- 下载
- 交互测试
- 浏览器支持
- 用法
- 函数参考
- 使用示例
- 问题
- 联系和版权
基本信息
浏览器支持
| Browser | Storage support | Survives browser restart | Survives browser crash | Storage size |
| Chrome 4 | + | + | + | 5 MB |
| Firefox 3.6 | + | + | + | 5 MB |
| Firefox 3 | + | + | + | 5 MB |
| Firefox 2 | + | + | + | 5 MB |
| IE8 | + | + | + | 10 MB |
| IE7 | + | + | + | 128 kB |
| IE6 | + | + | + | 128 kB |
| Opera 10.50 | + | + | - | 5 MB |
| Opera 10.10 | - | N/A | N/A | N/A |
| Safari 4 | + | + | + | 5 MB |
| Iphone Safari | + | + | + | 5 MB |
| Safari 3 | - | N/A | N/A | N/A |
用法
jStorage的使用需要引入Prototype/MooTools/jQuery +jQuery-JSON /JSON2,无论哪种方式,语法保持不变。
- <script src="//cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
- <script src="https://raw.github.com/andris9/jStorage/master/jstorage.js"></script>
- <script> /* $.jStorage is now available */ </script>
- <script src="//cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
- <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/1.8.0/jquery.min.js"></script>
- <script src="https://raw.github.com/andris9/jStorage/master/jstorage.js"></script>
- <script> /* $.jStorage is now available */ </script>
函数参考
set(key, value[, options])
正确用法:$.jStorage.set("xml", xml_node)错误:$.jStorage.set("xml", {xml: xml_node})
示例:
- <script src="json2.js"></script>
- <script src="jquery.js"></script>
- <script src="jstorage.js"></script>
- <script>
- $.jStorage.set("key1", "value1", {TTL: 3000});
- setInterval(function(){
- var vaule = $.jStorage.get("key1");
- document.writeln(vaule + ";");
- },1000);
- </script>
get(key[, default])
value = $.jStorage.get(key)
value = $.jStorage.get(key, "default value")
deleteKey(key)
setTTL(key, ttl)
$.jStorage.setTTL("mykey", 3000); // TTL3秒
对key设置TTL(毫秒数)。设置0或负值以删除key
getTTL(key)
ttl = $.jStorage.getTTL("mykey"); // TTL in milliseconds or 0
获取key剩余的生存时间(毫秒数)。如果key值不存在或者未设置TTL,返回0
- <script>
- $.jStorage.set("key1", "value1", {TTL: 5000});
- setInterval(function(){
- var ttl = $.jStorage.getTTL("key1");
- document.writeln(ttl + ";");
- },1000);
- </script>
flush()
$.jStorage.flush() —— 清除所有key
index()
$.jStorage.index() —— 以数组形式返回当前使用的所有key
var index = $.jStorage.index();
console.log(index); // ["key1","key2","key3"]
storageSize()
$.jStorage.storageSize() —— 返回存储的数据所占用的bytes
currentBackend()
$.jStorage.currentBackend() —— 返回当前使用的存储引擎,如果没有存储引擎返回false。
reInit()
$.jStorage.reInit() —— 重载数据。
storageAvailable()
$.jStorage.storageAvailable() —— 如果存储可用,返回true
subscribe(channel, callback)
$.jStorage.subscribe("ch1", function(channel, payload){ // 订阅 PubSub通道
console.log(payload+ " from " + channel);
});
publish(channel, payload)
$.jStorage.publish("ch1", "data") —— 发布有效值到PubSub通道
示例:
- <script src="json2.js"></script>
- <script src="jquery.js"></script>
- <script src="jstorage.js"></script>
- <script>
- function sync(){
- $.jStorage.publish("sync-textarea", $("data").value);
- }
- $.jStorage.subscribe("sync-textarea", function(channel, data){
- $("data").value = data;
- });
- </script>
- <div>
- <h2>Interactive test - publish/subscribe</h2>
- <p>Open the same page in other tabs or windows of the same browser</p>
- <p><textarea id="data" style="width: 600px; height: 100px;"></textarea></p>
- <p><input type="button" id="nupp" value="Sync entered data with other tabs/windows" onclick="sync()"></p>
- </div>
listenKeyChange(key, callback)
$.jStorage.listenKeyChange("mykey", function(key, action){
console.log(key + " has been " + action);
});
示例:
- <pre name="code" class="html"> <script src="json2.js"></script>
- <script src="jquery.js"></script>
- <script src="jstorage.js"></script>
- <script>
- function changeKey(){
- $.jStorage.set("mykey", 1);
- }
- function deleteKey(){
- $.jStorage.deleteKey("mykey");
- }
- $.jStorage.listenKeyChange("mykey", function(key, action){
- console.log(key + " has been " + action);
- });
- $.jStorage.listenKeyChange("mykey", function(key, action){
- console.log(key + " has been:::: " + action);
- });
- </script>
- <div>
- <p><input type="button" onclick="changeKey()" value="changeKey"></p>
- <p><input type="button" onclick="deleteKey()" value="deleteKey"></p>
- </div></pre>
stopListening(key[, callback])
$.jStorage.stopListening("mykey") —— 清除mykey的所有listeners,如果callback设置了,只有使用过的回调会被清除,否则所有的listeners都会被丢弃
使用示例
- <span style="font-weight:normal">jQuery -jQuery没有内置JSON编码/解码器,如果要支持IE6//IE7,需要以如下方式引用
- <script src="//cdnjs.cloudflare.com/ajax/libs/json2/20110223/json2.js"></script>
- <script src="//code.jquery.com/jquery-1.9.1.min.js"></script>
- <script src="jstorage.js"></script>
- <script>
- // Check if "key" exists in the storage
- var value = $.jStorage.get("key");
- if(!value){
- // if not - load the data from the server
- value = load_data_from_server()
- // and save it
- $.jStorage.set("key",value);
- }
- </script></span>
- <span style="font-weight:normal">Prototype
- <script src="//ajax.googleapis.com/ajax/libs/prototype/1.7.1.0/prototype.js"></script>
- <script src="jstorage.js"></script>
- <script>
- // Check if "key" exists in the storage
- var value = $.jStorage.get("key");
- if(!value){
- // if not - load the data from the server
- value = load_data_from_server()
- // and save it
- $.jStorage.set("key",value);
- }
- </script></span>
问题
- Cookies are not meant to save large quantities of data locally - they are meant to pass around ID values to keep track of users. Internet Explorer allows to use up to 20 cookies per domain with the payload of 4kB per cookie. It isn't very much, especially considering the need to chunk larger data into smaller bits. The fact that the data (max. 80 kB) is sent to the server with *every* call doesn't sound much of a good idea either.
联系和版权
jStorage is licensed under MIT-styled license, so basically you can do whatever you want to do with it.
参考:
用于浏览器本地存储的js插件 - jStorage的更多相关文章
- 浏览器本地存储(browser-storage,HTML5-localStorage > IE-UserData > Cookie)
https://www.baidufe.com/component/browser-storage/index.html BrowserStorage是浏览器本地存储的一个解决方案,存储优先级依次为: ...
- jquery访问浏览器本地存储cookie,localStorage和sessionStorage
前言:cookie,localStorage和sessionStorage都是浏览器本地存储数据的地方,其用法不尽相同:总结一下基本的用法. 一.cookie 定义: 存储在本地,容量最大4k,在同源 ...
- 浏览器本地存储(browser-storage)
https://www.baidufe.com/component/browser-storage/api.html 首页 | API参考 | 升级日志 BrowserStorage.api.set( ...
- Vue学习之---浏览器本地存储(8/17)
博客园(纯干货):https://www.cnblogs.com/zheng-yuzhu/ 文章目录 1.基础知识 2.代码实例(localStorage.html) 3.测试效果 4.代码实例(se ...
- vis用于做3D图表的js插件
vis.js用于做3D图表:(浏览网站需要FQ)实例:http://visjs.org/graph3d_examples.html代码下载:https://github.com/almende/vis
- JavaScript浏览器本地数据存储
浏览器本地存储主要使用的是sessionStorage和localStorage.两者都支持,sessionStorage保存的是浏览器和服务器的一次对话信息,只在一次回话中有效.当在新标签页或新窗口 ...
- JavaScript:浏览器的本地存储
cookie.localStorage.sessionStorage的使用 <!DOCTYPE html> <html lang="en"> <hea ...
- 本地存储sessionStorage 、 localStorage 、cookie整理
sessionStorage . localStorage .cookie 的区别 sessionStorage 和 localStorage 是HTML5 Web Storage API 提供的,可 ...
- HTML5本地存储(Local Storage) 的前世今生
长久以来本地存储能力一直是桌面应用区别于Web应用的一个主要优势.对于桌面应用(或者原生应用),操作系统一般都提供了一个抽象层用来帮助应用程序保存其本地数据 例如(用户配置信息或者运行时状态等). 常 ...
随机推荐
- Maven手动添加依赖的jar文件到本地Maven仓库
原文出处:https://www.iteblog.com/archives/646.html 寫得很好,轉走僅供學習,望諒解! Apache Maven,是一个软件(特别是Java软件)项目管理及自动 ...
- extjs6需要引入文件
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...
- HDU 3977 斐波那契循环节
这类型的题目其实没什么意思..知道怎么做后,就有固定套路了..而且感觉这东西要出的很难的话,有这种方法解常数会比较大吧..所以一般最多套一些比较简单的直接可以暴力求循环节的题目了.. /** @Dat ...
- 重构改善既有代码设计--重构手法12:Extract Class (提炼类)
某个类做了应该由2个类做的事.建立一个新类,将相关的字段和函数从旧类搬移到新类. 动机:一个类应该是一个清楚地抽象,处理一些明确的责任.但是在实际工作中,类会不断成长扩展.你会在这儿加入一些功能,在哪 ...
- 【BZOJ】3173: [Tjoi2013]最长上升子序列(树状数组)
[题意]给定ai,将1~n从小到大插入到第ai个数字之后,求每次插入后的LIS长度. [算法]树状数组||平衡树 [题解] 这是树状数组的一个用法:O(n log n)寻找前缀和为k的最小位置.(当数 ...
- 2017ACM暑期多校联合训练 - Team 5 1006 HDU 5205 Rikka with Graph (找规律)
题目链接 Problem Description As we know, Rikka is poor at math. Yuta is worrying about this situation, s ...
- bzoj 1143 二分图最大独立集
我们可以将一个点拆成两个点x,y,那么如果存在一条i->j的路径,我们就连接xi,yj,那么答案就是n-最大匹配数. 因为i->j所以对于i与j只能选一个,那么我们只需要求出来二分图的最大 ...
- div遮罩实现禁用鼠标(click、hover等)事件
这两天在帮老师做网页,今天想实现在一块区域内禁止鼠标的各种事件,本来是想在框架模板的js文件里去修改,但是改代码的时候有点凌乱...感觉应该自己把问题想复杂了. 所以想了想要是能实现在一个区域内(如: ...
- IE6透明PNG解决方案
IE6不支持PNG-24图片一直困扰很多人,但是可以通过IE的独有的滤镜来解决,解决的方案很多,比如:将滤镜写在CSS里,还可以写成单独的 Javascript文件,本来认为推荐两种做法:第一种,将所 ...
- Lucene7.2.1系列(二)luke使用及索引文档的基本操作
系列文章: Lucene系列(一)快速入门 Lucene系列(二)luke使用及索引文档的基本操作 Lucene系列(三)查询及高亮 luke入门 简介: github地址:https://githu ...