有时候我们在前端开发中为了提高用户体验,减少向服务器请求的次数,常常要在用户的电脑上存储数据,即要实现浏览器的本地存储数据功能。我在这里整理了一下常用的几种方案。
1.针对IE6以上(含)内核的浏览器,我们可以使用UserData 行为(userData Behavior)
说明:
userData 行为通过将数据写入一个UserData存储区(UserData store)来保存数据,userData可以将数据以XML格式保存在客户端计算机上,如果你用的是 Windows 2000 或者 Windows XP,是保存在C:\Documents and Settings\Liming\UserData\文件夹下(如果操作系统不是安装在C盘,那么C就应该是操作系统所在的分区)。该数据将一直存在,除 非你人为删除或者用脚本设置了该数据的失效期。userData行为提供了一个比Cookie更具有动态性和更大容量的数据结构。每页的UserData 存储区数据大小可以达到64 Kb,每个域名可以达到640 Kb。userData 行为通过sessions为每个对象分配UserData存储区。使用save和load方法将UserData存储区数据保存在缓存(cache)中。 一旦UserData存储区保存以后,即使IE浏览器关闭或者刷新了,下一次进入该页面,数据也能够重新载入而不会丢失。出于安全的考虑,相同协议使用同 一个文件夹保存UserData存储区数据。
使用:
(1)首先必须在行内或文档的head部分声明如下样式:
.userData {behavior:url(#default#userdata);}
或者使用如下js代码来声明:
document.documentElement.addBehavior(”#default#userdata”);
(2)成员:
expires 设置或取得使用userData行为保存数据的失效日期,使用方法:对象ID.expires = UTC格式的时间字符串;
getAttribute() 取得指定的属性值;
load(存储区名) 从userData存储区载入存储的对象数据;
removeAttribute() 删除指定的属性值;
save(存储区名) 将对象存储到一个userData存储区;
setAttribute() 设置指定的属性值;
XMLDocument 取得存储该对象数据的XML DOM引用
(3)示例:
document.documentElement.addBehavior("#default#userdata");
document.documentElement.load("t");
document.documentElement.setAttribute("value", "test");
document.documentElement.save("t");
2.针对Firefox2(含)以上内核的浏览器,我们可以使用globalStorage
说明:
This is a global object (globalStorage
) that maintains multiple private storage areas that can be used to hold data over a long period of time (e.g. over multiple pages and browser sessions).
Specifically, the globalStorage object provides access to a number of different storage objects into which data can be stored. For example, if we were to build a web page that used globalStorage on this domain (developer.mozilla.org) we’d have the following storage object available to us:
globalStorage[’developer.mozilla.org’] – All web pages within the developer.mozilla.org sub-domain can both read and write data to this storage object.
使用:
globalStorage[location.hostname]["t"] = "test";//赋值
var ret = globalStorage[location.hostname]["t"];//取值
globalStorage.removeItem("t");//删除
备注:
在firefox2中,我们可以在test00.aa.test.com 上的页面内使用globalStorage[“test.com“][“t“]=“test“来赋值,但是到了firefox3这么做却会得到一个错误提示,原因是firefox3的安全策略要求在使用 globalStorage时,指定的域名和实际的域名必须严格匹配!
3.Database Storage,HTML5里的内容,目前仅有Safari支持
说明:
This section is non-normative.
使用:
init:function(){
if(!this._inited){
this._db.transaction(function(t){
t.executeSql(“CREATE TABLE “+this.name+” (k TEXT UNIQUE NOT NULL PRIMARY KEY, v TEXT NOT NULL)”,[],function(){});
},function(){});
this._inited = true;
}
},
get:function(key,fn){
var ret = “”;
this._db.transaction(function(t){
t.executeSql(“SELECT v FROM “+this.name+” Where k=?”, [key], function(t, r){
if(r.rows.length>0){
ret=r.rows.item(0)['v'];
if(fn)fn.call(this,ret);};
},function(){
if(fn)fn.call(this,ret);
});
});
},
set:function(key,value){
this.remove(key);
this._db.transaction(function(t){
t.executeSql(“INSERT INTO “+this.name+” (k,v) VALUES (?, ?)”, [key,value],function(){});
},function(){});
},
remove:function(key){
this._db.transaction(function(t){
t.executeSql(“DELETE FROM “+this.name+” WHERE k=?”, [key],function(){});
},function(){});
}
4.针对其它浏览器,如常见的Opera,我们可以使用Cookie
说明:
A cookie is a small piece of information stored by the browser. Each cookie is stored in a name=value; pair called a crumb—that is, if the cookie name is “id” and you want to save the id’s value as “this”, the cookie would be saved as id=this. You can store up to 20 name=value pairs in a cookie, and the cookie is always returned as a string of all the cookies that apply to the page. This means that you must parse the string returned to find the values of individual cookies.
Cookies accumulate each time the property is set. If you try to set more than one cookie with a single call to the property, only the first cookie in the list will be retained.
You can use the Microsoft® JScript® split method to extract a value stored in a cookie.
使用:
function SetCookie(sName, sValue){
var
date = new Date();
document.cookie = sName + "=" + escape(sValue) + "; expires=" + date.toGMTString();
}
function GetCookie(sName){
var aCookie = document.cookie.split("; ");
for (var i=0; i < aCookie.length; i++){
var aCrumb = aCookie[i].split("=");
if (sName == aCrumb[0])
return unescape(aCrumb[1]);
}
return null;
}
function DelCookie(sName){
document.cookie = sName + "=" + escape(sValue) + "; expires=Fri, 31 Dec 1999 23:59:59 GMT;";
}
备注:
现代浏览器一般默认都支持cookie,但是使用cookie也有几个致命的弱点:存储的信息量太少,页面向服务器发送请求的同时cookie也会被发送,无形中浪费用户的带宽。
5.其它解决方案
Google Gear:Google开发出的一种本地存储技术;
Flash:利用Flash也可以实现本地存储
这两种方法的优点是:能支持所有的OS和浏览器(Google Gear目前仅支持IE5+和Firefox1.5+);缺点是需要用户安装额外的插件,使用起来不如前面其它3种方法简便。
6.一些链接
DOM:Storage
HTTP cookies
Flash Local Storage
Internet Explorer userData behavior
http://www.whatwg.org/specs/web-apps/current-work/#sql
safari的一些杂记
相关推荐
BrowserStorage是针对HTML5引入的各种浏览器本地存储机制的一种封装库,旨在提供统一的API接口,以便开发者更加便捷地管理和操作这些存储方式。HTML5的本地存储主要包括Cookie、localStorage和sessionStorage,它们...
**兼容性问题和解决方案** 尽管LocalStorage是HTML5标准的一部分,但并非所有浏览器都支持。对于不支持LocalStorage的浏览器,可以使用UserData作为备选方案。一种常见的兼容性处理方式是通过检测浏览器是否支持...
在现代Web开发中,随着网页应用的复杂度和功能性的增强,本地存储的...开发者在设计和实现这些存储解决方案时,需要充分考虑兼容性、数据安全、存储容量和跨浏览器一致性等因素,以确保应用在各种环境下的正常运行。
开发者可以通过阅读源码、查看示例以及文档来学习如何集成和定制这个本地存储解决方案,以满足他们的特定需求。 总的来说,这个React-Native和浏览器的本地存储包装器是一个强大的工具,它通过提供高级功能,如大小...
在压缩包的文件列表中,我们可以看到`HxAnalyseService.sln`是Visual Studio的解决方案文件,包含项目及其配置信息。`HxAnalyseService.suo`是用户特定的设置文件,不包含源代码,但会影响开发环境的布局和设置。...
总的来说,“本地存储javascript类库”如`persist-js`为Web开发者提供了一种跨浏览器的本地数据存储解决方案,极大地简化了开发过程,提高了应用的性能和用户体验。在实际开发中,我们应该充分利用这类库的优势,为...
这个模块设计用于JavaScript环境中,目的是为了提供一种轻量、高效、易用的本地存储解决方案。它的特点包括但不限于使用键值对存储数据、适用于非关系型本地数据库、支持主流设备和浏览器的高兼容性,以及在性能上的...
Lowdb在Electron应用中可以作为一个理想的本地存储选择,因为它可以在主线程或渲染线程中使用,提供了与Web应用类似的本地数据管理能力。 ### 4. 浏览器兼容 在浏览器环境下,Lowdb使用浏览器的`localStorage`或`...
浏览器本地存储指的是网页浏览器为网页提供的存储空间,使得开发者能够保存和读取网站或应用的数据,以实现网站的离线访问、记录用户偏好设置等效果。传统上,常见的本地存储方式包括 Cookie、Web Storage...
本文介绍的是一套基于Java和Vue框架开发的Web浏览器本地视频访问系统。项目的设计初衷是为用户创造一种方便的途径,通过网络浏览器访问和播放存储在本地设备上的视频文件,同时具备基本的视频管理功能。该项目涉及的...
系统需求主要包括三个方面:首先,终端主机需要能够采集现场的数据,如压力、温度、流量等,然后通过专家系统进行分析,并将结果存储在本地。其次,所有终端通过无线通信方式将数据汇总到中心服务器,服务器再通过...
Web浏览器中的在线地图示例 大意 现代js地图库支持同步和异步图块加载。 您可以将这种方法更改为拥有一些永久性存储的位置。 每个图块都有唯一的src...具有本地存储功能的Google地图: 和。 此代码可能与《 相抵触。
与传统的在虚拟机中安装多个浏览器的方法相比,阿里巴巴云浏览器提供了更为便捷的解决方案,极大地提高了工作效率。 首先,"阿里巴巴云浏览器"的核心优势在于其多浏览器实例的生成能力。用户无需在本地系统中安装多...
HTML5是超文本标记语言的最新标准,它引入了许多新的元素和特性,如`<video>`、`<audio>`、`<canvas>`等,以及增强的表单控件和本地存储功能等。这些新特性极大地丰富了网页的表现力和交互性,但同时也带来了与旧版...
以下是一些关键知识点和解决方案: 1. **JavaScript API调用**:JavaScript是现代Web页面的主要脚本语言,它可以用来与浏览器交互并执行各种任务。虽然JavaScript本身不能直接启动本地应用程序,但可以通过一些间接...
随着HTML5的兴起,Web开发者们迎来了更为强大和标准化的本地存储解决方案——Web Storage规范,包括Web SQL Database和IndexedDB等。 **1. Web Storage** - **定义**: 目前最广泛支持的HTML5本地存储标准。 - **...
与传统的本地(on-premises)架构相比,AWS云解决方案提供更经济、便捷和安全的优势。例如,通过使用预留实例(RI),企业可以预先购买计算资源,降低长期成本。此外,AWS的弹性伸缩功能允许根据实际需求自动调整...
针对这种需求,出现了多种将Web应用转化为本地应用的方案,其中HTML5本地应用开发方案通过结合Python的webkit引擎和gtk工具包,成为了一种有效的解决方案。 首先,我们来看一下HTML5,它是目前Web开发中最前端的...
本解决方案针对智慧园区的建设背景、痛点问题及核心价值进行深入探讨,旨在构建一个互联互通、高效智能的园区运营环境。 首先,智慧园区面临的挑战主要体现在以下几个方面: 1. **缺乏系统性规划**:传统的园区...