Я пишу расширения браузера для 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");
};
Причина, по которой мне нужно знать разницу между закрытием и ошибкой, заключается в том, что я могу попробовать другой номер порта, если сервер не смог привязываться к определенному порту. Если бы это было близко, возможно, сервер разбился, но он смог привязываться первоначально к порту, поэтому клиент может захотеть попробовать тот же порт снова. – Elliott