Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/362.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 如何:测试客户机是否为;“桌面终端”;_Javascript_Php_Thin Client - Fatal编程技术网

Javascript 如何:测试客户机是否为;“桌面终端”;

Javascript 如何:测试客户机是否为;“桌面终端”;,javascript,php,thin-client,Javascript,Php,Thin Client,我担心我已经知道答案了,但我还是冒着风险:有人知道我是否有办法测试正在访问网站的客户端是否是瘦客户端(桌面终端)?这里的问题是,如果你甚至考虑使用JavaScript(动画),瘦客户机会开始严重滞后。 我基本上想为网站提供一个“轻”版本,在那里我根据客户禁用所有特殊效果。我看过用户代理,但它似乎没有透露任何有用的东西 有什么办法可以判断吗?没有真正干净的方法来解决这个问题,因为瘦客户端或远程桌面上没有HTTP头这样的东西 但是,如果您确实需要一个解决方案来识别慢客户机,您可以尝试以下方法。这类似

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

我基本上想为网站提供一个“轻”版本,在那里我根据客户禁用所有特殊效果。我看过用户代理,但它似乎没有透露任何有用的东西


有什么办法可以判断吗?

没有真正干净的方法来解决这个问题,因为瘦客户端或远程桌面上没有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分配给你们两个,以获得一些很棒的输入。我对你的建议提出了自己的看法,并付诸实施,效果非常好。:)