如何测试客户端是否为“桌面终端”

4
我害怕我已经知道答案了,但我还是想冒险问一下:是否有任何方法可以测试访问网站的客户端是否为瘦客户机(桌面终端)?问题在于,如果您甚至考虑使用JavaScript(动画),瘦客户机就会开始严重滞后。
基本上,我想提供“轻量级”网站版本,根据客户端禁用所有特殊效果。我已查看用户代理,但似乎没有提供任何有用信息。有办法识别吗?

真正的问题在于,我的网站上有一些JavaScript动画,完全禁用它不是一个选项。 - Some one else
你是正确的,我已经做到了。仍然希望得到肯定的答复 :) - Some one else
例如,您可以检测他们是否启用了JavaScript。 - Benjamin Gruenbaum
2个回答

2

由于细客户端或远程桌面没有HTTP头,因此没有真正干净的解决方法。

但是如果您确实需要解决慢客户端的问题,可以尝试以下方法。这类似于Google在Maps上使用的方法,以确定客户端是否能处理Maps。

在这种方法中,您将使用一块嵌入的JavaScript代码来提供HTML页面。这个代码块执行一个资源密集型操作,应该类似于你的实际代码所做的操作。

您测量此操作消耗的时间,并决定它是否表现良好。

现在,您加载实际的JavaScript,可以通过创建带有document.write的脚本标签并传递参数来告诉脚本运行模式,或者通过使用适当的参数初始化已经加载的代码。

快速且简单的示例实现如下(使用jQuery,但也可以用纯JS实现):

<script type="text/javascript">
    var
        $elem,
        now = new Date(),
        isFast,
        counter = 0;

    while (new Date() - now < 100)
    {
        $elem = $('<div style="display: none">');
        $('body').append($elem);
        $elem.remove();
        ++counter;
    }

    alert(counter);
    isFast = (counter > 100);


    // now, either embed the actual script ...
    document.write('<scr'+'ipt type="text/javascript" src="http://www.example.com/js/test.js?fast=' + isFast + '"></scr'+'ipt>');

    // ... or initialize the already loaded code
    var myControllerInstance = new MyController(isFast);
    myControllerInstance.makeStuffHappen();
</script>

关键的部分是定义“快”的含义,因为计时代码运行缓慢可能有不同的原因。你可能会出现太多的假阴性或假阳性。

编辑:更新了JS示例,如@fero所建议的。谢谢!


2
我认为采用倒置方法并创建div元素,例如100毫秒,然后计算浏览器创建了多少个div可能会更好。否则,您可能会得到一个持续时间过长的性能测试 - 请记住,在较慢的客户端上执行耗时的测试操作也会增加页面加载时间,这可能已经比通常情况下更长。 - fero
那是一个好点,但实现起来要复杂得多。你需要创建一个后台循环并在一定时间后停止它,这对于JavaScript而言相当困难。(你也可以使用性能API,但只适用于少数浏览器。)或者我漏掉了什么? - lxg
2
是的,我认为你漏掉了一些东西。 :-) 你可以像这样做:var start = new Date(), counter = 0; while (new Date() - start < 100) { createStuff(); counter++ } 然后查看 counter 来衡量性能。 - fero
当然!我在想解决方案时有些被异步的setTimeout搞晕了。;) 非常感谢你! - lxg
非常感谢你们两位提供的出色建议,我根据你们的建议制作了自己的版本并实现了它,效果非常好。 :) - Some one else

-3

没有直接的方法可以找到页面是否在桌面终端中打开,但有一个巧妙的方法...你总是可以找到用户使用的移动设备,你可以用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
    }

JS:

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
}

希望这可以帮助所有想要检测用户是否在桌面上打开页面的人。

抱歉,这并没有帮助。问题不是关于检测桌面/移动设备。 - Salman A
@SalmanA 我使用相同的方法来查找视口桌面或移动设备。它对我非常有效。不知道为什么它完全没有帮助到你。 - Khaleel
请再次阅读问题。原帖想知道访问网站的浏览器是否在远程桌面会话或TeamViewer等应用程序内运行。 - Salman A

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接