刷新或关闭页面时如何停止Winform Webbrowser的WebSocket连接?

时间:2019-04-16 12:00:58

标签: c# wpf websocket webbrowser-control

我正在处理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,关闭后直接将其杀死

但是我不知道这些解决方案是如何实现的,我希望有更好的方法和建议。

0 个答案:

没有答案