初始化WebSocket时IE11上出现SecurityError

时间:2018-09-28 06:45:51

标签: javascript websocket internet-explorer-11

我们有一个代码,每次打开应用程序时都会创建多个websocket实例。

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

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

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

此外,这仅在最新版本的IE 11和Edge中发生。

enter image description here

2 个答案:

答案 0 :(得分:2)

IE 11每个主机最多只能有6个websocket实例。在最新版的IE 11(11.xxx)上,似乎已经更新了如何处理这些实例。

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

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

在最新的IE 11版本上,我们仍未找到与此相关的任何文档。而且,如果有人可以提供此功能,那将是非常棒的事情,并且会受到赞赏。

答案 1 :(得分:1)

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

Microsoft为此提供了一份正式声明: 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作为密钥,而不是上面描述中描述的contoso.exe。

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

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