我正在处理WPF项目,我使用Winform的Web浏览器控件使其可访问网页,并使用WebSocket刷新数据。但是有一个奇怪的问题。当我单击Web浏览器刷新6次或切换到另一个界面(关闭然后打开Web浏览器)6次时,该网页无法创建新的WebSocket,并报告脚本错误SecurityError
。 / p>
在我的项目中,我已将Web浏览器内核更改为 IE11 。我还找到了相关信息。 Windows系统限制了IE浏览器中Web套接字连接的数量。默认大小为6。
根据我的测试,在IE(11)和Google Chrome中,刷新或关闭页面时,Web套接字将自动关闭,但是WinForm中的Web浏览器不会关闭,除非整个应用程序都关闭了,但是您可以编写js脚本,使页面在关闭页面之前主动关闭Web套接字实例。但是由于该网页是由其他人提供的,因此我们无法对其进行修改,因此我只能在软件中进行一些处理。
这是一个网页演示:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="ie=edge">
<title>Document</title>
</head>
<body>
<div id="content"></div>
<button onclick="test()">Test</button>
<script>
function test() {
let ws = new WebSocket('ws://localhost:3000/test');
let el = document.getElementById("content");
ws.onopen = function () {
console.log("[CLIENT] open()");
ws.send('Hello!');
};
ws.onmessage = function (message) {
console.log(message.data);
el.innerHTML = message.data
};
ws.onerror = function (err) {
el.innerHTML = err
}
}
</script>
</body>
</html>
我现在想到了几种解决方案:
使用js尝试关闭所有Web套接字
找到一种配置Web浏览器的方法,以使其在刷新和关闭时可以自动关闭Web套接字。
使用新进程托管Webbrowser,关闭后直接将其杀死
但是我不知道这些解决方案是如何实现的,我希望有更好的方法和建议。