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

Kev*_*vin 4 javascript css internet-explorer

我在使用IE9中的userData行为时遇到了麻烦,我在遇到不支持Web存储规范的IE版本时会使用它.

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

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

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

Kev*_*vin 6

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

是否有某种官方声明表达这一点("这"意味着IE9不再支持userData)?

由于我没有找到确认在IE9中停止支持此特定行为的官方声明,因此网上的评论和投诉必须足够:IE9中不支持userData行为.此外,IE10中不支持任何行为和HTC.

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

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

//Assuming "element" has had the userData behavior associated with it through CSS
if(element.addBehavior)
Run Code Online (Sandbox Code Playgroud)

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

幸运的是,我们可以利用数据存储机制与XMLDocument具有userData行为的每个元素所接收的成员之间的关系.由于此特定成员表示在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
    } 
}
Run Code Online (Sandbox Code Playgroud)

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