我有一个非常简单的网页,除了正文中的以下脚本之外,该网页是空的:
<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,通常是 IE5,它不支持 WebSocket
构造函数。
要覆盖此设置,有几个选项,上面的评论中提到了一个:
"You are correct, it looks like someone added a custom meta tag in the site's
web.config
rolling it back to 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,兼容性 View 设置,(取消选中)在兼容性 View 中显示 Intranet 站点
-- 或 -- - IE11、Internet 选项、安全、本地 Intranet、站点(用于定义如何检测 Intranet 网络的多个选项)
注意事项...
- 由于历史原因,当这些设置被篡改时,许多环境都会崩溃,因为网站在编写时就考虑到了 IE5 兼容性。由于这些原因,逐页或逐站点解决方案通常比更改 PC 上的设置更受青睐。
- 由于组策略域和 IE11 支持的常见配对,“受信任的站点”和“本地 Intranet 区域”等“Internet 选项”可能会显示为灰色。与您的域管理员合作,根据需要进行调整。
关于javascript - 为什么仅在托管并使用 IE11 时 WebSocket(URL) 才未定义?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38231629/