2014-10-27 4 views
4

Я пишу расширения браузера для Firefox, Chrome и Safari. При попытке подключиться к серверу WebSocket с использованием расширения Safari, где нет сервера, прослушивающего конкретный порт, мое расширение Safari не генерирует исключение и не вызывает onerror. Вместо этого вызывается обработчик расширения расширения Safari. Я также видел это сообщение в консоли:Расширение Safari: проблемы с подключением к сети WebSocket onclose, а не onerror и без исключения

[Error] WebSocket network error: The operation couldn’t be completed. Connection refused (global.html, line 0) 

В Firefox и Chrome, кажется, справиться с этим правильно AFAIK и вызывает OnError.

Я просто делаю что-то вроде этого:

var socket = new WebSocket('ws://127.0.0.1:'+inPort, inHandlerName); 
socket.binaryType = "arraybuffer"; 

затем объявить обработчики для OnOpen, OnClose, OnError и OnMessage. inPort - 9000, а inHandlerName - строка типа «global-handler». Я помещал обработчики исключений в каждый из обработчиков WebSocket, а также функцию, которая имеет код, который создает WebSocket, но я не вижу никаких исключений.

Это известная проблема? Есть ли способ выяснить, не удалось ли соединение?

Edit: Это происходит на простой веб-страницы в Safari, а также:

 var theSocket = new WebSocket('ws://127.0.0.1:9000', 'global-message'); 

     theSocket.onopen = function() 
     { 
      console.log("onopen"); 
     }; 
     theSocket.onerror = function() 
     { 
      console.log("onerror"); 
     }; 
     theSocket.onmessage = function() 
     { 
      console.log("onmessage"); 
     }; 
     theSocket.onclose = function() 
     { 
      console.log("onclose"); 
     }; 
+0

Причина, по которой мне нужно знать разницу между закрытием и ошибкой, заключается в том, что я могу попробовать другой номер порта, если сервер не смог привязываться к определенному порту. Если бы это было близко, возможно, сервер разбился, но он смог привязываться первоначально к порту, поэтому клиент может захотеть попробовать тот же порт снова. – Elliott

ответ

8

Это не похоже, как она должна работать, но в OnClose сообщение, я получаю событие параметр такой как:

theSocket.onclose = function(event) 

и событие содержит поле под названием code. Когда я не могу подключиться к серверу, значение кода 1006. В настоящее время я установил его так, что он проверяет, если он работает в Safari, а затем проверить:

if(event.code == 1006) 

и если да, то я буду выполните ту же обработку, что и в случаях ошибок для Firefox и Chrome.

+0

Awesome. Ответ, который я искал. – kometen

 Смежные вопросы

  • Нет связанных вопросов^_^