js 的try catch 什么不能捕获websoket连接失败的异常?
有什么方法可以在js里判断websoket地址是否可以连接上,不让连接失败的错误显示在console里。
-
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服务器,在成功完成打开的握手之后,该服务器突然关闭了连接。 […]允许脚本区分这些情况将允许脚本探测用户的本地网络以准备攻击。 浏览器故意忽略规范要求的任何有用信息。规范作者担心访问此信息可能会允许恶意网页获取有关您网络的信息,因此他们要求浏览器以不可区分的方式报告所有连接时错误。
发表回复