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

jqTree not performing saveState in IE11 works fine FF12

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

无奈之下,我将一个打开的节点列表作为一个字符串保存到localStorage中,然后尝试循环遍历该列表并使用jqTree的openNode函数打开节点。这也不起作用。任何人都可以建议 workaround/fix 吗?非常感谢你。 :)

P.S。它在 IE11 中崩溃,并在 tree.jquery.js.

的第 1839 行显示错误消息“'JSON' 未定义”

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

来修复上述错误
state = JSON.stringify(this.getState(),undefined); //added undefined as second argument

但是现在折叠的节点正确显示expand/collapse图标,但是应该不可见的子节点仍然显示如下:

▼node1ajax

child1 child2

▼node2

child3

►child4

sub2

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

错误消息 JSON is undefined 是这里的重要线索。

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

那为什么IE11支持的时候会说是undefined呢?

只有一个可能的原因:IE 必须处于向后兼容模式,该模式取消了对 JSON API.

的支持

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

您可以通过按 F12 键调出浏览器开发工具并转到“仿真”选项卡来查看您在哪一个。如果它显示的数字是“7”,那么你就处于 IE7 模式,如果它是 5,那么你就处于 quirks 模式。

  • Quirks 模式:如果您的 HTML 代码没有有效的文档类型,所有版本的 IE 都会退回到 quirks 模式。您也可以使用某些类型的无效 HTML 来触发它,但缺少文档类型是迄今为止最常见的原因。

    因此请确保您的 HTML 页面都以如下行开头:<!DOCTYPE html>。那应该确保你没有处于怪癖模式。 (其他有效的文档类型也可以,但这是最容易使用的文档类型)。

    此外,运行 您的 HTML 通过 W3C 验证程序以确保您没有任何可能影响它的损坏 HTML。

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

执行上述两项操作,浏览器应进入标准模式,这应该意味着您会发现 IE11 开始表现得更好。您将不再需要添加 js_json2.js,并且您可以撤消所有其他 'fixes' 以尝试解决它。​​

希望对您有所帮助。