http://www.javascriptkit.com/javatutors/domstorage2.shtml

Augmenting DOM Storage with IE's userData behavior

As mentioned on the previous page, when it comes to IE, DOM Storage (sessionStorage and localStorage) is supported in IE8+. This leaves IE7 and IE6, still a formidable force on the internet depending on which survey you refer to, out in the cold. Depending on the task and your intended audience, that may be unacceptable. Fortunately, IE does actually support a proprietary feature that acts similarly to DOM Storage in terms of storage space, and that's IE's userData Behavior. Used in conjunction with DOM Storage, you can extend the guest list to your mega storage area to the lesser IE versions as well. IE userData behavior is supported in IE5+, and lets you persist up to 1MB of data per domain. Granted it's not quite the capacity of DOM Storage (4MB), but certainly a huge improvement over the miserly 4KB of space offered by JavaScript cookies.

IE's userData behaviour works as follows- you give the element in which you wish its data to be persisted a userData behavior (using either inline or external CSS), then call the appropriate userData methods of the element to save/retrieve that info:

IE userData Behavior
Methods Description
getAttribute(attr) Returns the persisted value stored inside the specified attribute of an element.
load(name) Loads an object containing the persisted values of a particular userData behavior.
removeAttribute(attr) Removes the specified attribute from an element and its persisted value
save(name) Saves an object containing the persisted values of a particular userData behavior.
setAttribute(attr, value) Stores a value to be persisted inside the specified attribute of an element.
properties  
expires Gets or sets the expiration date of the data persisted with the userData behavior.
XMLDocument Returns a reference to the XML Document of the persisted object.

The best way to wrap your head around userData is just to see it in action- the following recreates the example on the previous page of persisting contents typed into a TEXTAREA in the event of an accidental browser refresh so it works in IE6 and IE7 as well:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
<form>
<textarea id="feedback" style="width:350px;height:200px" style="behavior:url('#default#userData')"></textarea><br />
<input type="button" value="Click to Hard Reload Page" onClick="location.reload(true)" />
</form>
 
<script type="text/javascript">
 
var feedbackarea=document.getElementById("feedback")
if (window.sessionStorage){
    if (sessionStorage.feedbackdata){ //if there is data stored for the target textarea
    feedbackarea.value=sessionStorage.feedbackdata //recall it upon refresh or crash
    }
    feedbackarea.onkeyup=function(e){
        sessionStorage.feedbackdata=this.value //save contents of textarea as user types
    }
}
else if (feedbackarea.addBehavior){
    feedbackarea.load("feedbackpersist") //load data if any persisted inside userData object "feedbackpersist"
    if (feedbackarea.getAttribute("feedbackattribute")){ //if there is persisted data founded inside attribute "feedbackattribute"
        feedbackarea.value=feedbackarea.getAttribute("feedbackattribute") //recall it upon refresh or crash
    }
    feedbackarea.onkeyup=function(e){
        feedbackarea.setAttribute("feedbackattribute", this.value) //save contents of textarea into attribute "feedbackattribute" as user types
    feedbackarea.save("feedbackpersist") //save state of feedback textarea into userData object "feedbackpersist"
    }
}
 
</script>

Demo (FF3.5+, Chrome4+, Safari4+, Opera10.5+, or IE6+):

Lets go through the important points:

  • The element you wish to store userData to must be given a CSS Behavior, whether via inline or external CSS: behavior:url('#default#userData')
  • To check whether the browser supports the userData Behavior, you can run a check for the addBehavior() method on an element (ie: if (feedbackarea.addBehavior){...})
  • Call element.load(name) first when you wish to access any information stored inside one of the element's attributes.
  • Call element.getAttribute(attr) to actually access the information inside a given attribute.
  • Call element.setAttribute(attr, value) to store and persist any value you wish as an attribute of a given element.
  • Call element.save(name) at the end after you have saved all information into any attributes of the element to actually save this information across sessions.

Note that in the above example, the contents persisted using userData lasts indefinitely, unlike the sessionStorage portion, which is just, naturally, session only. For the former, you can modify its expires property to change the duration of the persistence.

Augmenting DOM Storage with IE's userData behavior的更多相关文章

  1. 浅谈 HTML5 的 DOM Storage 机制 (转)

    在开发 Web 应用时,开发者有时需要在本地存储数据.当前浏览器支持 cookie 存储,但其大小有 4KB 的限制.这对于一些 Ajax 应用来说是不够的.更多的存储空间需要浏览器本身或是插件的支持 ...

  2. userData Behavior

    https://msdn.microsoft.com/zh-cn/vstudio/ms531424 userData Behavior This topic documents a feature o ...

  3. web离线应用--dom storage

    web离线应用--dom storage dom storage是html5添加的新功能,其实也不是什么新的应用,只不过是cookie的放大版本,由于cookie的大小只有4kb,而且在每次请求一个新 ...

  4. HTML5在线状态检测和DOM Storage

    除了离线资源缓存外,html5离线应用开发还可能用到以下技术 在线状态检测 navigator.onLine navigator.onLine 属性表示当前是否在线.如果为 true, 表示在线:如果 ...

  5. IE中的userData

    之前做项目时用到了localstorage,但是考虑到浏览器存在IE8以下不兼容问题,所以来介绍以下IE中的userData. 本地存储解决方案很多,比如Flash SharedObject.Goog ...

  6. JavaScript本地存储实践(html5的localStorage和ie的userData)

    http://www.css88.com/archives/3717 JavaScript本地存储实践(html5的localStorage和ie的userData) 发表于 2011年06月11日  ...

  7. 浅析Web数据存储-Cookie、UserData、SessionStorage、WebSqlDatabase

    Cookie 它是标准的客户端浏览器状态保存方式,可能在浏览器诞生不久就有Cookie了,为什么需要Cookie 这个东东?由于HTTP协议没有状态,所以需要一个标志/存储来记录客户浏览器当前的状态, ...

  8. userData IE

    蛮讨厌IE的,因为他常常需要特别照顾,就像DOM Storage(sessionStorage和localStorage)只能支持IE8+,对于以下的只能使用userData. 原理:通过在docum ...

  9. 阿伦学习html5 之 Local Storage (本地储存)

    一.浏览器存储的发展历程 本地存储解决方案很多,比如Flash SharedObject.Google Gears.Cookie.DOM Storage.User Data.window.name.S ...

随机推荐

  1. CF567F/51nod2522 上下序列

    CF567F/51nod2522 上下序列 考虑没有限制怎么做呢,就是从小往大加数,记录加到哪个数了还有左边有多少个数,然后这个数有两个,只能是左边放两个.右边放两个.左右各放一个.(实际上就是1,1 ...

  2. Macaca上手体验

    在研究了一段时间Appium后,尝试对另一个框架做实验——Macaca,阿里的开源测试框架,该框架不只适合移动端,同样适用于web端,可谓是方便的很啊~ 同时支持js.java.python.封装好的 ...

  3. Effective C++(Third Edition) Item29 为“异常安全”而努力是值得的

    “异常安全”有两个条件: 1.不泄露任何资源 可以通过以对象管理资源的方式(Item13). 2.不允许数据败坏 异常安全函数提供以下三种保证之一 a.基本承诺 如果异常被抛出,程序内的任何事物都仍然 ...

  4. 爬取代理IP

    现在爬虫好难做啊,有些网站直接封IP,本人小白一个,还没钱,只能找免费的代理IP,于是去爬了西刺免费代理,结果技术值太低,程序还没调试好, IP又被封了... IP又被封了... IP又被封了... ...

  5. Linux入门基础(四):Linux网络基本配置

    网络基础 ip编址 ip编址是一个双层编址方案(网络部分和主机部分),一个ip地址标识一个主机(或一个网卡接口) 现在应用最广泛的是IPv4编址,已经开始逐渐向IPv6编址切换 IPv4地址32位长, ...

  6. mnist手写数字识别(决策树)

    import numpy as np from sklearn.neural_network import MLPClassifier from sklearn.linear_model import ...

  7. Laya1.x Timer小记

    Timer是时钟管理类,在Laya初始化的时候会创建一个实例,通过Laya.timer访问. TimerHandler TimerHandler是对每一个定时任务的封装,每次调用frameOnce.f ...

  8. Java字符串与日期互转

    Java字符串与日期的相互转换 1.字符串转日期 字符串的格式与日期的格式一定要对应,并且字符串格式可以比日期格式多,但不能少,数字大小不自动计算日期.其中需要主要大小写 年yyyy 月MM 日dd ...

  9. 02_python内置模块_timeit

    timeit模块可以用来测试一小段python代码的执行速度. (1)timeit.Timer(stmt='pass', setup='pass', timer=<timer function& ...

  10. linux下自己安装软件做成命令

    安装nodejs,从官网下下来的是一个压缩包,解压下里面有可执行文件.教程上用ln -s [可执行文件的绝对路径] [/usr/local/bin/]建了一个软连接,这样就能直接无视路径,用命令行调用 ...