如何使用 javascript 在浏览器中找出 websocket-protocol 版本?
Posted
技术标签:
【中文标题】如何使用 javascript 在浏览器中找出 websocket-protocol 版本?【英文标题】:How can I find out the websocket-protocol version in a Browser using javascript? 【发布时间】:2013-03-21 15:38:19 【问题描述】:只有当 websocket-version 为 13 又名 RFC 6455 可用时,我才想将 websockets 与 Jetty-Server(版本 8.1.9)一起使用。如果它不可用,将使用 http-fallback-solution。
[random Browser javascript] <--websocket v13 only--> [Jetty Server Java]
websocket-protocol-version 存储在 WebSocket 握手请求中:
GET /mychat HTTP/1.1
Host: server.example.com
Upgrade: websocket
Connection: Upgrade
Sec-WebSocket-Key: x3JJHMbDL1EzLkh9GBhXDw==
Sec-WebSocket-Protocol: chat
Sec-WebSocket-Version: 13
Origin: http://example.com
现在我想在 javascript 中有这样的东西:
if (window.WebSocket)
// browser supports websockets
if (bla.websocketversion != 13)
// wrong websocket version
// use fallback connection
else
// use websockets
else
// use fallback connection
如果我使用带有 Safari 5.0.2 的 iPad(它似乎使用较旧的 websocket 协议)连接到 Jetty-Server,我会收到警告: 警告:oejw.WebSocketFactory:不支持的 Websocket 版本:2147483647
我找不到在 Javascript 中获取访问权限或更改握手请求的方法。不可能吗?有什么解决方法吗?
【问题讨论】:
如果当前版本是13
,2147483647
似乎相当先进 :-)
【参考方案1】:
这可能是一个建议,到目前为止,我们无法从 websocket 对象中获取任何属性。所以我们可以在特定的时间内测试一个 websocket 连接。这可能是一种临时解决方法。
此解决方法仅在连接未建立,websocket 就绪状态仍在连接时
function init()
_ws = new WebSocket("ws://example.com");
_ws.onopen = onopen();
_ws.onclose = onclose();
setTimeout(function () connectionCheck(_ws), 5000);
function connectionCheck(_ws)
if(_ws.readyState == 0)
//call your fallback sollution
else
return;
【讨论】:
以上是关于如何使用 javascript 在浏览器中找出 websocket-protocol 版本?的主要内容,如果未能解决你的问题,请参考以下文章
如何使用 JavaScript 防止浏览器对退格按钮的默认历史返回操作?
如何找出使用 javascript/jquery 调用函数的次数?
我们如何使用 javascript 找出 webview.MediaPlaybackRequiresUserAction 的值