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

时间:2014-09-08 09:26:46

标签: javascript php thin-client

我担心我已经知道了答案,但我不妨冒险一下:有谁知道我是否有办法测试访问网站的客户端是否是瘦客户端(桌面终端)?这里的问题是,如果您考虑使用JavaScript(动画),瘦客户端就会开始出现可怕的延迟。

我基本上想要提供一个" light"该网站的版本,我根据客户端禁用所有特殊效果。我看过用户代理,但似乎没有给出任何有用的东西。

有什么方法可以说出来吗?

2 个答案:

答案 0 :(得分:2)

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

但是,如果您确实需要一个解决方案来识别慢速客户端,您可以尝试以下方法。它类似于Google在地图上用来确定客户端是否可以处理地图的内容。

在这种方法中,您将使用一大堆嵌入式JavaScript提供HTML页面。此块执行资源繁重的操作,该操作应与您的实际代码相似。

您可以衡量此操作所消耗的时间,并确定其是否正常运行。

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

一个quick'n'dirty示例实现看起来像这样(使用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 提出。谢谢!

答案 1 :(得分:-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
}

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