Javascript 如何:测试客户机是否为;“桌面终端”;
我担心我已经知道答案了,但我还是冒着风险:有人知道我是否有办法测试正在访问网站的客户端是否是瘦客户端(桌面终端)?这里的问题是,如果你甚至考虑使用JavaScript(动画),瘦客户机会开始严重滞后。 我基本上想为网站提供一个“轻”版本,在那里我根据客户禁用所有特殊效果。我看过用户代理,但它似乎没有透露任何有用的东西Javascript 如何:测试客户机是否为;“桌面终端”;,javascript,php,thin-client,Javascript,Php,Thin Client,我担心我已经知道答案了,但我还是冒着风险:有人知道我是否有办法测试正在访问网站的客户端是否是瘦客户端(桌面终端)?这里的问题是,如果你甚至考虑使用JavaScript(动画),瘦客户机会开始严重滞后。 我基本上想为网站提供一个“轻”版本,在那里我根据客户禁用所有特殊效果。我看过用户代理,但它似乎没有透露任何有用的东西 有什么办法可以判断吗?没有真正干净的方法来解决这个问题,因为瘦客户端或远程桌面上没有HTTP头这样的东西 但是,如果您确实需要一个解决方案来识别慢客户机,您可以尝试以下方法。这类似
有什么办法可以判断吗?没有真正干净的方法来解决这个问题,因为瘦客户端或远程桌面上没有HTTP头这样的东西 但是,如果您确实需要一个解决方案来识别慢客户机,您可以尝试以下方法。这类似于谷歌在地图上使用什么来确定客户端是否可以处理地图 在这种方法中,您将使用一块嵌入式JavaScript交付HTML页面。该块执行的是一个资源密集型操作,应该与实际代码类似 您可以测量此操作所消耗的时间,并确定它是否运行良好 现在,您可以通过使用
document.write
创建脚本标记并传递一个参数来加载实际的JavaScript,该参数告诉脚本在哪种模式下运行,或者通过使用适当的参数初始化已加载的代码
一个快速的“n”脏示例实现如下所示(使用jQuery,但也可以在纯JS中实现):
变量
$elem,
现在=新日期(),
我很快,
计数器=0;
而(新日期()-现在<100)
{
$elem=$('');
$('body')。追加($elem);
$elem.remove();
++计数器;
}
警报(计数器);
isFast=(计数器>100);
//现在,要么嵌入实际脚本。。。
文件。写(“”);
// ... 或者初始化已经加载的代码
var myControllerInstance=新的MyController(isFast);
myControllerInstance.makeStuffOccess();
微妙的部分是定义什么是“快”,因为计时代码运行慢可能有不同的原因。你可能会有太多的误报或误报
编辑:更新了JS示例,由@fero提出。谢谢 没有直接的方法来确定页面是否在桌面终端中打开,但有一种很棘手的方法。。你总是可以找到哪些移动设备的用户视图,你可以用javascript和php来做,如果没有检测到任何移动设备,那么你可以假设它是桌面,我已经用php和js发布了示例代码 PHP:
function is_mobile() {
if (preg_match("/Mobile|Android|BlackBerry|iPhone|Windows Phone/", $_SERVER['HTTP_USER_AGENT'])) {
return true;
}
}
if(is_Mobile){
// Mobile!
} else {
// Not mobile
}
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function() {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i);
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
if(isMobile.any()){
// Mobile!
} else {
// Not mobile
}
JS:
function is_mobile() {
if (preg_match("/Mobile|Android|BlackBerry|iPhone|Windows Phone/", $_SERVER['HTTP_USER_AGENT'])) {
return true;
}
}
if(is_Mobile){
// Mobile!
} else {
// Not mobile
}
var isMobile = {
Android: function() {
return navigator.userAgent.match(/Android/i);
},
BlackBerry: function() {
return navigator.userAgent.match(/BlackBerry/i);
},
iOS: function() {
return navigator.userAgent.match(/iPhone|iPad|iPod/i);
},
Opera: function() {
return navigator.userAgent.match(/Opera Mini/i);
},
Windows: function() {
return navigator.userAgent.match(/IEMobile/i);
},
any: function() {
return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
}
};
if(isMobile.any()){
// Mobile!
} else {
// Not mobile
}
希望这能帮助你们所有想要检测用户是否在桌面上打开页面的人这里真正的问题是;我在网站上有一些JavaScript动画,完全禁用它不是一个选项。你的权利和我已经做到了这一点。仍然希望得到一个肯定的答案:)例如,你可以检测他们是否启用了javascript。对不起,这根本没有帮助。问题不在于检测桌面/移动设备。@SalmanA我使用相同的方法来查找桌面或移动设备的查看端口。这对我来说很有魅力。这对你一点帮助都没有请把问题再读一遍。OP想知道访问网站的浏览器是否在内部运行,例如远程桌面会话或teamviewer。我认为最好使用反向方法,创建100毫秒的
div
元素,然后计算浏览器创建了多少div
s。否则,您可能会遇到持续时间过长的性能测试—请记住,在较慢的客户端上执行耗时的测试操作也会增加页面加载时间,因为它是较慢的客户端,页面加载时间可能已经比平常长了。这是一个很好的观点,但实现起来要复杂得多。您必须创建一个后台循环,并在一段时间后终止它,这对于JS来说是非常困难的。(您也可以使用Performance API,但只能在少数浏览器上使用。)或者我遗漏了什么吗?是的,我认为您遗漏了什么。:-)您可以像var start=new Date(),counter=0;while(new Date()-start<100){createStuff();counter++}
,然后查看计数器来衡量性能。当然!在考虑解决方案时,我被一些疯狂的异步setTimout
东西迷住了非常感谢你!Thx分配给你们两个,以获得一些很棒的输入。我对你的建议提出了自己的看法,并付诸实施,效果非常好。:)