4

我在 IE9 中的userData行为遇到了问题,当遇到不支持 Web Storage 规范的 IE 版本时,我会使用该行为。

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

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

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

4

1 回答 1

6

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

是否有某种官方声明表达了这一点(“this”表示 IE9 不再支持 userData)?

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

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

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

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

处理 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
    } 
}

仍然会感谢 MS 的官方声明确认这种支持的下降,以及在不添加虚拟属性的情况下确定完整的 userData 行为支持的方法。如果您遇到其中任何一个,请随时发布它们。

于 2012-11-21T02:27:20.017 回答