我有一个非常简单的网页,除了正文中的以下脚本之外,该网页为空:
<script type="text/javascript">
var host = "ws://sample-host/echo";
var ws = new WebSocket(host);
</script>
我将此页面托管在运行IIS 7.5的Web服务器上,作为经典ASP.NET应用程序的一部分。当我使用Chrome或Firefox打开页面时,将调用WebSocket构造函数。当我使用IE11打开页面时,该函数未定义。
我可以将页面保存在本地,然后在IE,Chrome和Firefox中打开它,并且正确调用了构造函数。
为什么仅当托管和使用IE11时websocket()才是未定义的?
默认情况下,属于“本地Intranet”区域的页面将以兼容模式运行IE11,通常用于不支持WebSocket
构造函数的IE5。
要覆盖这一点,有几个选项,上面的注释中提到了一个:
“您是正确的,好像有人在网站的
web.config
中添加了自定义元标记并将其回滚到IE9。”
...通过IIS进行设置,修改web.config
:
<system.webServer>
<httpProtocol>
<customHeaders>
<clear />
<add name="X-UA-Compatible" value="IE=Edge" />
</customHeaders>
</httpProtocol>
</system.webServer>
...另一个选择是通过HTML <meta>
标签强制执行此操作...
<head>
<meta http-equiv="X-UA-Compatible" content="IE=edge">
</head>
此外,您可以通过定义什么是“本地Intranet”来避开此问题...
警告语 ...*由于其历史悠久的性质,当编写这些网站时考虑到IE5兼容性时,如果对这些设置进行篡改,则许多环境都会中断。由于这些原因,与在PC上更改设置相比,通常首选逐页解决方案或逐站点解决方案。*由于组策略域和IE11支持的常见配对,“受信任的站点”和“本地Intranet区域”之类的“ Internet选项”显示为灰色。与域管理员一起根据需要进行调整。