23.3.2 IE用户数据
在IE5.0 中,微软通过一个自定义行为引入了持久化用户数据的概念。用户数据允许每个文档最多128KB 数据,每个域名最多1MB 数据。要使用持久化用户数据,首先必须如下所示,使用CSS 在某个元素上指定userData 行为:
<div style="behavior:url(#default#userData)" id="dataStore"></div>
一旦该元素使用了userData 行为,那么就可以使用setAttribute()方法在上面保存数据了。
为了将数据提交到浏览器缓存中,还必须调用save()方法并告诉它要保存到的数据空间的名字。数据空间名字可以完全任意,仅用于区分不同的数据集。请看以下例子。
var dataStore = document.getElementById("dataStore"); dataStore.setAttribute("name", "Nicholas"); dataStore.setAttribute("book", "Professional JavaScript"); dataStore.save("BookInfo");
在这段代码中,<div>元素上存入了两部分信息。在用setAttribute()存储了数据之后,调用了save()方法,指定了数据空间的名称为BookInfo。下一次页面载入之后,可以使用load()方法指定同样的数据空间名称来获取数据,如下所示。
dataStore.load("BookInfo"); alert(dataStore.getAttribute("name")); //"Nicholas" alert(dataStore.getAttribute("book")); //"Professional JavaScript"
对load()的调用获取了BookInfo 数据空间中的所有信息,并且使数据可以通过元素访问;只有到载入确切完成之后数据方能使用。如果getAttribute()调用了不存在的名称或者是尚未载入的名程,则返回null。
你可以通过removeAttribute()方法明确指定要删除某元素数据,只要指定属性名称。删除之后,必须像下面这样再次调用save()来提交更改。
dataStore.removeAttribute("name"); dataStore.removeAttribute("book"); dataStore.save("BookInfo");
运行一下
这段代码删除了两个数据属性,然后将更改保存到缓存中。
对IE 用户数据的访问限制和对cookie 的限制类似。要访问某个数据空间,脚本运行的页面必须来自同一个域名,在同一个路径下,并使用与进行存储的脚本同样的协议。和cookie 不同的是,你无法将用户数据访问限制扩展到更多的客户。还有一点不同,用户数据默认是可以跨越会话持久存在的,同时也不会过期;数据需要通过removeAttribute()方法专门进行删除以释放空间。
和cookie 一样,IE 用户数据并非安全的,所以不能存放敏感信息。