禁止"与'xyz'的WebSocket连接失败"

Kev*_*son 9 javascript error-suppression websocket

我编写了一个使用Web套接字的Web应用程序.这个想法是我的应用程序在启动时尝试自动连接到最近连接到主机.如果它无法建立与其中任何一个的连接,则它会将用户定向到连接部分并要求他们手动建立连接.

所有这一切都有效.总之,我按顺序尝试每个已知主机,如果200ms后它没有连接(`readyState!= 1),它会尝试下一个.所有这些主机应该在局域网上,所以200ms工作非常可靠.如果列表中的最后一个也失败,那么Web将打开一个模式,指示用户手动键入主机.

问题是,通过尝试自动连接,我必须为我尝试过的主机创建websockets,它会向控制台输出如下所示的错误消息:

与'ws:// lightmate:8080 /'的WebSocket连接失败:连接建立错误:net :: ERR_NAME_NOT_RESOLVED

与'ws:// localhost:8080 /'的WebSocket连接失败:连接建立错误:net :: ERR_CONNECTION_REFUSED

虽然不是任何方式致命的缺陷,但这是不雅观的,妨碍了我的调试.

我试图通过new WebSocket(address)使用try/catch块包围调用来删除它,并且错误仍然通过,我也尝试设置一个onerror处理程序,希望这会抑制错误消息.什么都没有用.

connect: function(){
  var fulladdr = completeServerAddress(address);
  try {
    connection = new WebSocket(fulladdr);
    connection.suppressErrorsBecauseOfAutoConnection = suppressErrorsBecauseOfAutoConnection; //Store this module-scoped variable in connection, so if the module changes suppression state, this connection won't.
  } catch (e){
    //Make sure we don't try to send anything down this dead websocket
    connection = false;
    return false;
  }
  connection.binaryType = "arraybuffer";
  connection.onerror = function(){
    if (connection !== false && !connection.suppressErrorsBecauseOfAutoConnection){
      Announce.announceMessage("Connection failed with server");
    }
    connection = false;
  };
  connection.onmessage = function(m){
    rxMessage(ConnectionProtocol.BaseMessage.parseChunk(m.data));
  };
  connection.onclose = function(){
    hooks.swing("disconnected", "", 0);
    if (connection !== false && !connection.suppressErrorsBecauseOfAutoConnection){
      Announce.announceMessage("Connection lost with server");
    }
  };
  connection.onopen = function(){
    sendMessages(ConnectionProtocol.HandshakeMessage.create(name, sources, sinks));
    while (idlingmessages.length){
      websocketConnection.send(idlingmessages.splice(0,1)[0]);
    }
    hooks.swing("connected", "", 0);
  };
},
Run Code Online (Sandbox Code Playgroud)

Dupl免责声明:这个问题类似于这个StackOverflow问题,但这个问题已经过时了一年,并且那里的共识是"你不能".我希望从那时起事情发生了变化.

Jai*_*ime 2

无法捕获该错误消息,该错误消息与WebSocket创建对象的代码异步发生。

更多详细信息请参见:Javascript does not catch error in WebSocket instantiation