我在使用IE9中的userData行为时遇到了问题,我在遇到不支持Web存储规范的IE版本时使用了这种行为。
具体来说,执行.save()函数时似乎没有保存值(事实上,C:\Users\USERNAME\AppData\Roaming\Microsoft\Internet Explorer\UserData
中甚至没有userData文件夹
,也不是在执行.save()时创建的。
我做了一些研究,并且从各种网站上的一些评论中得出的共识是,它似乎在IE9中被禁用了。
是否有某种官方声明表达这一点?如果是这样,有没有办法测试给定的IE版本是否支持它(没有浏览器嗅探)?
答案 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行为支持而不添加虚拟属性的方法。如果您遇到其中任何一个,请随时发布。