初始化 WebSocket 时 IE11 上的 SecurityError

SecurityError on IE11 when initializing WebSocket

我们有一个代码可以在每次打开应用程序时创建多个 websocket 实例。

privateMembers.webSocket = new WebSocket(url, protocol);

其中 url 包含身份验证令牌。当应用程序 closed/unload 时,这些实例将关闭。观察到问题时,应用程序已嵌入 (iframe) 到另一个应用程序。

我们注意到在浏览器的控制台上记录了一个 SecurityError 异常。当这种情况发生时,在下一次初始化时创建的 websockets 的数量就会减少。例如,我们正在创建 5 个 websocket 实例,在下一次启动 iframe 时,它​​只会创建 4 个实例并记录此异常。每次卸载应用程序时,我们都会清除计数和数组。

另外,这只发生在最新版本的 IE 11 和 Edge 上。

IE 11 限制每个主机 6 个 websocket 实例。似乎在最新版本的 IE 11 (11.xxx) 上,似乎有关于如何处理这些实例的更新。

如果我们关闭具有 websocket 连接的 iframe 并且不触发这些实例上的 onclose,这些实例仍然存在但没有任何引用(悬空)。

为了解决我们的问题,我们必须检查所有这些 websocket 实例,并确保在我们关闭 iframe 时所有这些实例都已关闭。创建的实例数量减少是由于未关闭的 websocket 实例。

我们仍然没有在最新的 IE 11 版本上找到与此相关的任何文档。如果有人能提供这个,那就太好了,非常感谢。

同样的故事。我在使用 Websockets 的 iFrame 中加载的应用程序遇到了同样的问题。 您需要添加注册表项以允许更多的 websocket 连接。
InternetExplorer 将一台主机的连接数限制为 6 个。

微软对此有官方声明: https://docs.microsoft.com/en-us/previous-versions/windows/internet-explorer/ie-developer/general-info/ee330736(v=vs.85)#websocket-maximum-server-connections 您只需要使用 iexplore.exe 作为 Key 而不是上面描述中描述的 contoso.exe。

HKEY_LOCAL_MACHINE (or HKEY_CURRENT_USER) SOFTWARE Microsoft Internet Explorer Main FeatureControl FEATURE_WEBSOCKET_MAXCONNECTIONSPERSERVER iexplore.exe = (DWORD) 0x00000012 (18)

此配置将允许的限制设置为 18。