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

问题描述 投票:1回答:1

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

        <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()才是未定义的?

javascript websocket iis-7.5 internet-explorer-11
1个回答
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选项”显示为灰色。与域管理员一起根据需要进行调整。

© www.soinside.com 2019 - 2024. All rights reserved.