最近在 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)的威胁”。
我们可以简单地通过以下步骤重现这个问题。
使用 IE11 打开:https://www.google.com。
打开 F12 开发者工具,确保当前的文档模式大于等于 9。
在控制台中运行脚本:
document.write('hello');
脚本执行失败并抛出异常:“SEC7111: HTTPS 安全受到(null)的威胁”。
目前暂不确定这是产品设计还是一个 bug,个人更偏向于是个 bug,因为 Chrome、Firefox、Microsoft Edge 和其他版本 IE 均没有这个问题。
解决方案
使用 DOM 操作的方法来修改页面中的元素,而不要使用
document.write()
。加入 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 返回头: