Javascript jqTree在IE11中未执行saveState正常工作FF12

Javascript jqTree在IE11中未执行saveState正常工作FF12,javascript,jquery,jqtree,Javascript,Jquery,Jqtree,我正在开发一个web应用程序,并使用jqTree插件创建树菜单。我在创建树时使用了saveState参数。它在FireFox 12中运行良好,即在刷新时记住树的状态(使用localStorage),但在Internet Explorer 11中,它没有将数据保存到localStorage或作为cookie(我已经按照jqTree作者的说明添加了JQuery cookie,我可以很好地读写cookie) 出于绝望,我将打开的节点列表作为字符串保存到localStorage中,然后尝试循环遍历该列表

我正在开发一个web应用程序,并使用jqTree插件创建树菜单。我在创建树时使用了saveState参数。它在FireFox 12中运行良好,即在刷新时记住树的状态(使用localStorage),但在Internet Explorer 11中,它没有将数据保存到localStorage或作为cookie(我已经按照jqTree作者的说明添加了JQuery cookie,我可以很好地读写cookie)

出于绝望,我将打开的节点列表作为字符串保存到localStorage中,然后尝试循环遍历该列表并使用jqTree的openNode函数打开节点。这也不管用。是否有人可以建议解决方案/修复方案?非常感谢。:)

另外,它在IE11中崩溃,在tree.jquery.js的第1839行出现错误消息“'JSON'未定义”

更新:通过将js_json2.js添加到配置并将tree.jquery.js的第1839行更改为

state = JSON.stringify(this.getState(),undefined); //added undefined as second argument
但是,现在折叠的节点正确显示展开/折叠图标,但应不可见的子节点仍显示如下:

▼node1ajax

孩子1孩子2

▼节点2

孩子3

►孩子4

sub2


在这种情况下,sub2不应该是可见的,而是可见的。

错误消息
JSON未定义
是这里的一条重要线索

JSON
API是当前所有浏览器都支持的标准化API,包括IE11和Firefox(是的,甚至可以追溯到FF12)

那么为什么IE11在支持它的时候会说它是未定义的呢

这只有一个可能的原因:IE必须处于向后兼容模式,从而取消对JSON API的支持

这可能有两种模式:IE7兼容模式或怪癖模式。解决方案取决于您所处的模式

通过点击F12打开浏览器开发工具并转到仿真选项卡,您可以找到您所处的位置。如果显示的数字是“7”,那么你处于IE7模式,如果是5,那么你处于怪癖模式

  • 怪癖模式:如果你的HTML代码没有有效的doctype,IE的所有版本都会回到怪癖模式。您也可以使用某些类型的无效HTML触发它,但缺少doctype是目前为止最常见的原因

    因此,请确保您的HTML页面都以如下所示的行开头:
    。这应该能确保你不处于怪癖模式。(其他有效的doctype也可以,但这是最容易使用的)

    另外,通过W3C验证程序运行HTML,以确保没有任何损坏的HTML会影响它

  • IE7兼容模式:这通常由浏览器设置触发,尤其是在公司网络环境中。您可以通过指定
    X-UA-Compatible
    meta标记来覆盖它。您可以通过在HTML代码的
    部分添加以下行来完成此操作:

做了以上两件事,浏览器应该进入标准模式,这意味着你会发现IE11开始表现得更好。您将不再需要添加js_json2.js,并且您可能可以撤消您为解决此问题而进行的所有其他“修复”


希望有帮助。

Firefox 12??为什么要使用特定版本的Firefox?它有什么特别之处?没什么特别的,只是这些是我的客户标准化的IE和FF版本。它是一个intranet web应用程序。:)你的客户疯了。FF12是一个扩展的支持版本。唯一一个在it上标准化而不是保持最新的原因是他们是否有特定的理由关心长期支持。但是FF12的长期支持在很久以前就结束了。当前ESR版本为38版。这意味着您的客户端完全没有抓住要点。我查看了整个intranet设置,您非常正确,IE确实被踢回IE5模式,我将DOCTYPE更改为,并通过删除URL更改了兼容模式设置,现在浏览器显示正确。非常感谢你保留了我剩下的理智没问题。很高兴我能帮忙。请随意点击答案旁边的绿色勾号图标,将其标记为“已接受”。-)