Я пытаюсь использовать Javascript, чтобы определить, поддерживает ли веб-браузер веб-порты, но используя только обнаружение на основе функций, я получаю ложные срабатывания, поэтому я добавил тест агента пользователя, чтобы выбросить устройства Android, м не доволен. У меня есть Samsung Galaxy Tab 2, и вот мой код обнаружения:Каков наилучший способ обнаружения поддержки websocket с помощью Javascript?
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, например, использование другого браузера, что означает, что мой код обнаружения агента пользователя как-бы не был хорошим. Моя цель - не обязательно полагаться на пользовательский агент в первую очередь.
Любые предложения?
Одно из отличий я обнаружил, что, при попытке открыть сокет на нерабочий URL, ReadyState на объекте сеанса остается в '0' в браузере Android, тогда как в браузерах, которые фактически поддерживают WebSocket, он изменяется на «3» (= не удалось). Требуется тайм-аут, чтобы обнаружить, хотя и действительно грязный. – gzost
Я посмотрю, когда у меня появится шанс. Не знаю, является ли ваше предложение лучшим решением, но может быть. – Steven