【问题标题】:Why is WebSocket(URL) undefined only when hosted and using IE11?为什么 WebSocket(URL) 仅在托管和使用 IE11 时未定义?
【发布时间】:2016-07-06 18:50:01
【问题描述】:

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

        <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 时未定义?

【问题讨论】:

  • ws://sample-host/echo 是一个有效的 URL 吗?我没有看到 TLD
  • 不是,但是当我使用有效的 URL 时,结果是相同的 - IE 认为该函数未定义。使用无效 URL 时,所有其他浏览器都会尝试连接并返回未找到错误。
  • 可能是回滚 IE 的边缘元标记。您能发布您收到的确切错误消息吗?
  • @dandavis 你是对的,看起来有人在网站的 web.config 中添加了一个自定义元标记,将其回滚到 IE9。

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


【解决方案1】:

默认情况下,属于“本地 Intranet”区域的页面将以兼容模式运行 IE11,通常用于不支持 WebSocket 构造函数的 IE5。

要覆盖它,有几个选项,上面的 cmets 中提到了一个:

“你是对的,看起来有人在网站的web.config 中添加了一个自定义元标记,将其回滚到 IE9。”

...要通过IIS设置,修改web.config:

<system.webServer>
  <httpProtocol>
    <customHeaders>
      <clear />
      <add name="X-UA-Compatible" value="IE=Edge" />
    </customHeaders>
  </httpProtocol>
</system.webServer>

...另一种选择是通过 HTML &lt;meta&gt; 标签强制执行此操作...

   <head>
       <meta http-equiv="X-UA-Compatible" content="IE=edge">
   </head>

另外,你可以通过定义什么是“本地Intranet”来规避这个问题……

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

注意事项...

  • 由于其历史性质,当这些设置被篡改时,许多环境都会崩溃,因为网站是在考虑 IE5 兼容性的情况下编写的。由于这些原因,与在 PC 上更改设置相比,通常首选逐页或逐站点解决方案。
  • 由于组策略域和 IE11 支持的共同配对,“受信任的站点”和“本地 Intranet 区域”等“Internet 选项”可能会显示为灰色。与您的域管理员一起根据需要进行调整。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 2017-01-18
    • 2014-09-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-12-12
    相关资源
    最近更新 更多