阅读 1437

关于 websocket 的 onerror

先贴个 w3 规范的链接

exception 和 error event 都会由 onerror 抛出。不过在处理 error event 时 onerror 回调本身并没有多大用处。

一个重要原因是有这么一个规定,在某些条件下不允许 onerrorevent 携带说明原因的信息,如图:

即发生以上情况时,只能知道出错了,没法知道到底什么错。

虽然是有条件的限制,但是只要不能覆盖所有的情况,就不应该依赖 onerror而且条件还这么多

不过值得注意的是,error event 只有一种情况下会发生,那就是在 onclose 之前。原文是:

就是第二条里的这个 simple event named error

这时,error event 一定会紧接着 onclose,并且由于 oncloseevent 允许设置自定义 code,可以在这里对 error 做比较详细的处理。

话又说回来了,如果只是做一些粗略的判断还是可以的,毕竟至少可以在 onerror 中区分发生的是 exception 还是 error event。

但是!规范这种东西...我们知道浏览器经常不会严格按照规范实现,对于 websocket,我也不知道是不是完全按照规范实现的。不过从目前测试来看,应该没啥问题...

出了问题别找我...

另外,一些想当然会触发 onerror 的情况实际上并不会发生。

比如连接后立即调用 send() 时,会在 onerror 抛一个 Still in CONNECTING state 的 exception。既然这样,那么断开后再调用 send() 感觉也是类似的情况,应该也会有 exception 吧?

并不会。

对于这个情况,只能提前做处理,阻止 send(),或 send() 之前判断一下 readyState

文章分类
前端
文章标签