Каков наилучший способ обнаружения поддержки websocket с помощью Javascript?

Я пытаюсь использовать Javascript для определения того, поддерживает ли веб-браузер websockets, но используя только обнаружение на основе функций, я получаю ложные срабатывания, поэтому я добавил тест агента пользователя, чтобы вместо этого выкинуть устройства Android, что я "Я не доволен. У меня есть Galaxy Tab 2 Samsung, и здесь мой код обнаружения:

var isSupported = (("WebSocket" in window && window.WebSocket != undefined) ||
                   ("MozWebSocket" in window));

/* This line exists because my Galaxy Tab 2 would otherwise appear to have support. */
if (isSupported && navigator.userAgent.indexOf("Android") > 0)
  isSupported = false;

if (isSupported)
  document.write("Your browser supports websockets");
else
  document.write("Your browser does not support websockets");

Этот код, похоже, работает с IE, Firefox, Safari (включая iPhone/iPad) и Chrome. Тем не менее, проверка на основе функции возвращает true, когда я использую браузер по умолчанию для своего Samsung Galaxy Tab 2, что неверно, потому что этот браузер фактически не поддерживает веб-сайты. Кроме того, я не знаю, сколько других устройств Android имеет эту же проблему, поэтому на данный момент это лучшее решение, которое я знаю для обнаружения.

Есть ли лучший способ обнаружить поддержку websocket, отличную от того, что я делаю? Я действительно понимаю, что обходные пути существуют для Android, например, использование другого браузера, что означает, что мой код обнаружения агента пользователя как-бы не был хорошим. Моя цель - не обязательно полагаться на пользовательский агент.

Любые предложения?

Ответ 1

Это кратчайшее решение и используется Modernizr. Просто добавьте это в свой код

supportsWebSockets = 'WebSocket' in window || 'MozWebSocket' in window;

то вы можете использовать его, запустив

if (supportsWebSockets) {
     // run web socket code
}

Ответ 2

Я думаю, что библиотека Modernizr - это то, что вы ищете: http://modernizr.com/

Как только вы включите библиотеку на свою страницу, вы можете использовать простую проверку:

if(Modernizr.websockets){
    // socket to me baby
}

Ответ 3

после чтения ответа @gzost.. Я начал заниматься мастерингом.. так как ничто другое не может правильно определить WS на моем телефоне Android... даже websocket.org говорит, что у меня есть это, но потом не удается подключиться.

В любом случае, попробуйте это обходное решение.. похоже, правильно его обнаруживает/выключает с помощью chrome, FF, safari и браузера по умолчанию для Android.

var has_ws=0;
function checkWebSocket(){
  try{
    websocket = new WebSocket("ws:websocket.org");
    websocket.close('');
  }catch(e){ //throws code 15 if has socket to me babies
    has_ws=1;
  }
}

$(document).ready(function(){
  checkWebSocket();
});

Ответ 4

Эта страница находится в верхней части поиска google.

В 2016 году сокращение горчицы для современной реализации WebSockets (без префиксов, таких как MozWebSocket) было бы

if (
  'WebSocket' in window && window.WebSocket.CLOSING === 2
) {
 // supported
}

http://www.w3.org/TR/websockets/#the-websocket-interface