首页 新闻 会员 周边

js 的try catch 什么不能捕获websoket连接失败的异常?

0
悬赏园豆:10 [已解决问题] 解决于 2020-03-16 16:37

有什么方法可以在js里判断websoket地址是否可以连接上,不让连接失败的错误显示在console里。

``炯``的主页 ``炯`` | 初学一级 | 园豆:4
提问于:2020-03-09 16:09
< >
分享
最佳答案
1

不清楚js。
c#里的try catch只有try里面抛出异常才能被catch捕获到
姑且猜测一下:
websoket连接失败内部处理(内部写到console里了)了,没抛出来,所以没被catch捕获到
再猜测一下:
你是不希望console有太多的连接失败信息影响了其他信息的读取
我觉得你可以这样做:
1 看一下是否有CANCONNECT类似这种bool型的判断
2 设置一下console的日志记录等级

不懂js,全是猜测,哈哈

收获园豆:10
猝不及防 | 老鸟四级 |园豆:2781 | 2020-03-09 16:20
其他回答(2)
0
风行天下12 | 园豆:3867 (老鸟四级) | 2020-03-09 16:39

websoket 地址不可连接时,就会在控制台报错。

支持(0) 反对(0) ``炯`` | 园豆:4 (初学一级) | 2020-03-16 16:37

你说的这个监控状态的需要地址是可以访问的。

支持(0) 反对(0) ``炯`` | 园豆:4 (初学一级) | 2020-03-16 16:38
0

WebSocket的连接时间错误会导致已调度事件,而不是引发值。这是因为抛出操作必须是同步的。为了将所有连接时错误处理为抛出错误,WebSocket构造函数需要完全挂起所有脚本执行和UI交互,直到完成整个WebSocket握手。相反,连接进程异步运行,从而允许浏览器线程在后台初始化WebSocket连接时继续工作。由于连接的异步性质,WebSocket必须通过错误事件报告错误,因为同步的新WebSocket操作在异步连接任务遇到错误时已经完成。
您看到的ERR_CONNECTION_拒绝消息纯粹是为了开发人员的利益;脚本无法以任何方式访问它。它在JavaScript环境中没有任何表示。它只是一条红色的信息,出现在你的控制台上,告诉你,这个人正在查看浏览器,关于一个错误。
错误处理程序事件是响应失败的正确位置,但缺少脚本可读的连接时间错误信息是按设计的。从WebSocket API的WHATWG规范:
1.用户代理不得以允许脚本区分以下情况的方式向脚本传递任何故障信息:
2.无法解析其主机名的服务器。
3.无法将数据包成功路由到的服务器。
4.拒绝在指定端口上连接的服务器。
5.无法正确执行TLS握手的服务器(例如,无法验证服务器证书)。
6.未完成开始握手的服务器(例如,因为它不是WebSocket服务器)。
7.一种WebSocket服务器,它发送了正确的开始握手,但指定了导致客户端断开连接的选项(例如,服务器指定了客户端未提供的子目录)。
8.一种WebSocket服务器,在成功完成打开的握手之后,该服务器突然关闭了连接。
[…]允许脚本区分这些情况将允许脚本探测用户的本地网络以准备攻击。
浏览器故意忽略规范要求的任何有用信息。规范作者担心访问此信息可能会允许恶意网页获取有关您网络的信息,因此他们要求浏览器以不可区分的方式报告所有连接时错误。
from https://stackoverflow.com/questions/31002592/javascript-doesnt-catch-error-in-websocket-instantiation

DreamCatt | 园豆:239 (菜鸟二级) | 2020-03-09 16:50
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册