首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >howto:测试客户端是否是“桌面终端”

howto:测试客户端是否是“桌面终端”
EN

Stack Overflow用户
提问于 2014-09-08 09:26:46
回答 2查看 214关注 0票数 4

我担心我已经知道答案了,但我还是冒险吧:有没有人知道我是否有办法测试访问网站的客户端是否是瘦客户端(桌面终端)?这里的问题是,如果您甚至考虑使用JavaScript(动画),瘦客户机就会开始严重滞后。

我基本上想提供一个“轻”版本的网站,在那里,我禁用所有的特殊效果取决于客户端。我看过用户代理,但这似乎没有提供任何有用的东西。

有什么办法可以说吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-09-08 10:17:08

没有真正干净的方法来解决这个问题,因为对于瘦客户端或远程桌面来说,不存在HTTP头之类的东西。

但是,如果您确实需要一个解决方案来识别慢客户端,则可以尝试以下方法。这类似于Google在地图上使用什么来确定客户端是否能够处理地图。

在这种方法中,您将使用一块嵌入的JavaScript来交付HTML页面。这个块执行一个资源繁重的操作,应该与您的实际代码类似。

您可以度量此操作所消耗的时间,并确定其性能是否良好。

现在,您可以通过使用JavaScript创建脚本标记并传递一个参数来加载实际的document.write,或者通过使用适当的参数初始化已经加载的代码。

一个快速的‘n’脏示例实现看起来如下(使用jQuery,但也可以在普通的JS中实现):

代码语言:javascript
复制
<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>

微妙的部分是定义什么是“快”,因为可能有不同的原因,时间代码运行缓慢。你可能会得到太多的假阴性或假阳性。

编辑:由@fero提议的更新的JS示例。谢谢!

票数 2
EN

Stack Overflow用户

发布于 2014-09-08 10:17:19

没有直接的方法可以找到桌面终端中打开的页面,但是有一种棘手的方法。您总是可以找到哪个移动设备用户视图,您可以在javascript和php中完成,如果没有检测到任何移动设备,那么您可以假设它是桌面,我已经在php和js中发布了示例代码。

PHP:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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
}

希望这有助于所有想要检测用户是否打开桌面页面的人。

票数 -3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25721043

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档