【发布时间】:2013-12-02 08:14:00
【问题描述】:
我正在尝试使用 Javascript 来检测网络浏览器是否支持 websocket,但仅使用基于功能的检测,我得到了误报,所以我添加了一个用户代理测试来代替 Android 设备,我不高兴。我有一个三星 Galaxy Tab 2,这是我的检测代码:
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。但是,当我使用 Samsung Galaxy Tab 2 的默认浏览器时,基于功能的检查返回 true,这是不正确的,因为该浏览器实际上不支持 websocket。此外,我不知道有多少其他 Android 设备有同样的问题,所以目前,这是我所知道的用于检测的最佳解决方案。
除了我正在做的事情之外,还有更好的方法来检测 websocket 支持吗?我确实意识到 Android 存在解决方法,例如使用不同的浏览器,这意味着我的用户代理检测代码原样不是一件好事。我的目标是一开始就不必依赖用户代理。
有什么建议吗?
【问题讨论】:
-
我发现的一个区别是,当尝试打开到非工作 URL 的套接字连接时,会话对象上的 readyState 在 Android 浏览器中保持为“0”,而它会发生变化在实际支持 WebSocket 的浏览器上设置为“3”(=失败)。但是需要超时来检测,而且确实很脏。
-
有机会我会去看看的。不知道您的建议是否是最好的解决方案,但它可能是。
标签: javascript android websocket