Ste*_*ven 13 javascript android websocket
我正在尝试使用Javascript来检测Web浏览器是否支持websockets,但仅使用基于功能的检测,我得到误报,所以我添加了一个用户代理测试来抛弃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");
Run Code Online (Sandbox Code Playgroud)
此代码似乎适用于IE,Firefox,Safari(包括iPhone/iPad)和Chrome.但是,当我使用Samsung Galaxy Tab 2的默认浏览器时,基于功能的检查将返回true,这是不正确的,因为该浏览器实际上不支持websockets.此外,我不知道有多少其他Android设备有同样的问题,所以目前,这是我所知道的最佳解决方案.
除了我正在做的事情之外,还有更好的方法来检测websocket支持吗?我确实知道Android的解决方法存在,例如使用不同的浏览器,这意味着我的用户代理检测代码不是一件好事.我的目标是首先不必依赖用户代理.
有什么建议?
Isa*_*ner 12
这是最短的解决方案,由Modernizr使用.只需将其添加到您的代码中即可
supportsWebSockets = 'WebSocket' in window || 'MozWebSocket' in window;
Run Code Online (Sandbox Code Playgroud)
然后你可以通过运行来使用它
if (supportsWebSockets) {
// run web socket code
}
Run Code Online (Sandbox Code Playgroud)
我认为Modernizr库是您正在寻找的:http://modernizr.com/
在页面上包含库后,您可以使用以下简单检查:
if(Modernizr.websockets){
// socket to me baby
}
Run Code Online (Sandbox Code Playgroud)
在阅读了@ gzost的回复之后..我开始修补..因为没有别的东西可以在我的Android手机上正确检测到WS ...甚至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();
});
Run Code Online (Sandbox Code Playgroud)
小智 6
此页面在谷歌搜索中名列前茅。
在 2016 年,为现代 WebSockets 实现(没有前缀,例如MozWebSocket)削减芥末将是
if (
'WebSocket' in window && window.WebSocket.CLOSING === 2
) {
// supported
}
Run Code Online (Sandbox Code Playgroud)
http://www.w3.org/TR/websockets/#the-websocket-interface
| 归档时间: |
|
| 查看次数: |
10917 次 |
| 最近记录: |