如何解决IE11中遇到错误:“SEC7111: HTTPS 安全受到(null)的威胁”
2015年10月21日

最近在 IE11 中遇到网页不工作并报错: “SEC7111: HTTPS 安全受到(null)的威胁” 的问题。调试后发现这是由于在 HTTPS 页面调用 document.write() 方法所导致。

问题现象

一个 HTTPS 的页面在 IE11 中不工作,在 F12 中发现有错误信息:“SEC7111: HTTPS 安全受到(null)的威胁”,该页面在其他 IE 版本中一直没有问题。

问题分析

在对页面脚本进行分析后,发现是在执行 document.write() 方法时抛出了该异常。

进一步测试后发现:在 IE11 的文档模式 9~11 下,任何 HTTPS 页面中执行 document.write() 方法均会失败并抛出异常 “SEC7111: HTTPS 安全受到(null)的威胁”

我们可以简单地通过以下步骤重现这个问题。

  1. 使用 IE11 打开:https://www.google.com。

  2. 打开 F12 开发者工具,确保当前的文档模式大于等于 9。

    确保文档模式大于等于9

  3. 在控制台中运行脚本:

    document.write('hello');
    
  4. 脚本执行失败并抛出异常:“SEC7111: HTTPS 安全受到(null)的威胁”。

    脚本执行失败并抛出异常:“SEC7111: HTTPS 安全受到(null)的威胁”

目前暂不确定这是产品设计还是一个 bug,个人更偏向于是个 bug,因为 Chrome、Firefox、Microsoft Edge 和其他版本 IE 均没有这个问题。

解决方案

  1. 使用 DOM 操作的方法来修改页面中的元素,而不要使用 document.write()

  2. 加入 X-UA-Compatible 的 meta 标签或者 HTTP 返回头来指定 IE 运行在旧版本的文档模式下,如 5、7、8。

    X-UA-Compatible meta 标签:

    <html>
    <head>
        <meta http-equiv="X-UA-Compatible" content="IE=8" />
        ...
    </head>
    <body>
    </body>
    </html>
    

    X-UA-Compatible HTTP 返回头:

    X-UA-Compatible HTTP返回头