为什么WebSocket(URL)仅在托管和使用IE11时未定义?

时间:2016-07-06 18:50:01

标签: javascript websocket iis-7.5 internet-explorer-11

我有一个非常简单的网页是空的,除了正文中的以下脚本:

        <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中打开它,并正确调用构造函数。

为什么websocket()仅在托管和使用IE11时未定义?

1 个答案:

答案 0 :(得分:0)

默认情况下,属于“本地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”来避开此问题。

  • IE11,兼容性视图设置,(取消选中)在兼容性视图中显示Intranet站点
    -或-
  • IE11,Internet选项,安全性,本地Intranet,站点(用于定义如何检测Intranet网络的多个选项)

警告语 ...

  • 由于这种做法的历史性质,当编写这些网站时考虑到IE5兼容性,因此当对这些设置进行篡改时,许多环境都会中断。由于这些原因,与在PC上更改设置相比,通常首选逐页解决方案或逐站点解决方案。
  • 由于组策略域和IE11支持的常见配对,“受信任的站点”和“本地Intranet区域”之类的“ Internet选项”可能会变灰。与您的域管理员一起根据需要进行调整。