javascript - 使用 Javascript 检测 websocket 支持的最佳方法是什么?

标签 javascript android websocket

我正在尝试使用 Javascript 来检测网络浏览器是否支持 websockets,但是仅使用基于特征的检测,我得到了误报,所以我添加了一个用户代理测试来代替 Android 设备,我不高兴了。我有一个 Samsung 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,这是不正确的,因为该浏览器实际上并不支持 websockets。此外,我不知道有多少其他 Android 设备有同样的问题,所以目前,这是我所知道的用于检测的最​​佳解决方案。

有没有比我现在做的更好的方法来检测 websocket 支持?我确实意识到 Android 存在解决方法,例如使用不同的浏览器,这意味着我的用户代理检测代码按原样并不是一件好事。我的目标是首先不必依赖用户代理。

有什么建议吗?

最佳答案

这是最短的解决方案,由 Modernizr 使用。只需将其添加到您的代码中

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

然后就可以运行了

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

关于javascript - 使用 Javascript 检测 websocket 支持的最佳方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20060320/

相关文章:

php - 大双引号: best way to add them

javascript - 获取类的每个后代元素的 ID

Android:点击的 boolean 值和 button.isPressed() 之间有什么区别?

javascript - VueJS - 如何从父 v-for 调用子组件上的事件

javascript - 每 5 秒刷新一次类

空对象引用上的 java.lang.String com.google.firebase.auth.FirebaseUser.getUid()'

android - 无法将 adb Android Studio 连接到 3.4.1

python - thor websocket 负载测试 - 在 Web 套接字握手请求中添加自定义 http header

mysql - 使用 Socket.io 在 HTML 页面上实时查看数据库

ajax - 如何处理多台服务器上的WebSocket?