Internet Explorer:userData行为的官方状态?

时间:2012-11-20 20:45:34

标签: javascript css internet-explorer

我在使用IE9中的userData行为时遇到了问题,我在遇到不支持Web存储规范的IE版本时使用了这种行为。

具体来说,执行.save()函数时似乎没有保存值(事实上,C:\Users\USERNAME\AppData\Roaming\Microsoft\Internet Explorer\UserData中甚至没有userData文件夹 ,也不是在执行.save()时创建的。

我做了一些研究,并且从各种网站上的一些评论中得出的共识是,它似乎在IE9中被禁用了。

是否有某种官方声明表达这一点?如果是这样,有没有办法测试给定的IE版本是否支持它(没有浏览器嗅探)?

1 个答案:

答案 0 :(得分:6)

经过一些研究,我似乎(大部分)找到了我的问题的答案。

  

是否有某种官方声明表达了这一点(“这个”   这意味着IE9中不再支持userData?

由于我没有找到确认在IE9中停止支持此特定行为的官方声明,因此网上的评论和投诉必须足够: IE9中不支持userData行为。此外,no behaviors and HTCs are supported in IE10

  

有没有办法测试给定的IE版本是否支持它(userData行为)   (没有浏览器嗅探)?

对于IE10以及不支持userData的早期版本的IE,可以检查行为附加到的元素上是否存在addBehavior()成员函数:

//Assuming "element" has had the userData behavior associated with it through CSS
if(element.addBehavior)

处理IE9有点棘手,因为存在与userData行为相关的方法,并且在正确使用时不会抛出异常。

幸运的是,我们可以利用数据存储机制与具有userData行为的每个元素所接收的XMLDocument成员之间的关系。由于此特定成员表示在调用save()时要存储到磁盘的文件,因此每次调用element.XMLDocument.xml时都应更新element.addAttribute(key, value)。如果不是,那么我们可以假设不支持userData:

//Assuming "element" has had the userData behavior associated with it through CSS
if(element.addBehavior)
{
    element.addAttribute("test", "");

    //If the to-be-saved XML was updated with the attribute we just added
    if(element.XMLDocument.xml.indexOf("test") !== -1) 
    {
        //userData behavior is supported
    }
    else
    {
        //userData behavior is not supported
    } 
}

MS的官方声明确认这种支持的下降仍然是值得赞赏的,以及确定完整的userData行为支持而不添加虚拟属性的方法。如果您遇到其中任何一个,请随时发布。