JavaScript FAQ(二十二)——客户端信息

十九、客户端信息

 

1、浏览器名称(Browser Name

Q:我如何检测浏览器名称?

A:要获取用户浏览器的实际名称,你可以用navigator.appName和navigator.userAgent属性。userAgent属性比appName更可靠些,例如,Firefox(和其他一些浏览器)由于兼容Netscape Navigator,因此对navigator.appName可能返回“Netscape”。

下面的代码实例使用navigator.userAgent实现浏览器检测。同时,它也使用了navigator.appName和navigator.appVersion,仅在userAgent返回非期望形式时作为参考。下面就是在你浏览器中输出:

 例子中进行浏览器检测的源代码是:

var nVer = navigator.appVersion;
var nAgt = navigator.userAgent;
var browserName  = navigator.appName;
var fullVersion  = ''+parseFloat(navigator.appVersion);
var majorVersion = parseInt(navigator.appVersion,10);
var nameOffset,verOffset,ix;

// In MSIE, the true version is after "MSIE" in userAgent
if ((verOffset=nAgt.indexOf("MSIE"))!=-1) {
 browserName = "Microsoft Internet Explorer";
 fullVersion = nAgt.substring(verOffset+5);
}
// In Opera, the true version is after "Opera"
else if ((verOffset=nAgt.indexOf("Opera"))!=-1) {
 browserName = "Opera";
 fullVersion = nAgt.substring(verOffset+6);
}
// In Chrome, the true version is after "Chrome"
else if ((verOffset=nAgt.indexOf("Chrome"))!=-1) {
 browserName = "Chrome";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Safari, the true version is after "Safari"
else if ((verOffset=nAgt.indexOf("Safari"))!=-1) {
 browserName = "Safari";
 fullVersion = nAgt.substring(verOffset+7);
}
// In Firefox, the true version is after "Firefox"
else if ((verOffset=nAgt.indexOf("Firefox"))!=-1) {
 browserName = "Firefox";
 fullVersion = nAgt.substring(verOffset+8);
}
// In most other browsers, "name/version" is at the end of userAgent
else if ( (nameOffset=nAgt.lastIndexOf(' ')+1) < (verOffset=nAgt.lastIndexOf('/')) )
{
 browserName = nAgt.substring(nameOffset,verOffset);
 fullVersion = nAgt.substring(verOffset+1);
 if (browserName.toLowerCase()==browserName.toUpperCase()) {
  browserName = navigator.appName;
 }
}
// trim the fullVersion string at semicolon/space if present
if ((ix=fullVersion.indexOf(";"))!=-1) fullVersion=fullVersion.substring(0,ix);
if ((ix=fullVersion.indexOf(" "))!=-1) fullVersion=fullVersion.substring(0,ix);

majorVersion = parseInt(''+fullVersion,10);
if (isNaN(majorVersion)) {
 fullVersion  = ''+parseFloat(navigator.appVersion);
 majorVersion = parseInt(navigator.appVersion,10);
}

document.write('Browser name  = '+browserName+'<br>');
document.write('Full version  = '+fullVersion+'<br>');
document.write('Major version = '+majorVersion+'<br>');
document.write('navigator.appName = '+navigator.appName+'<br>');
document.write('navigator.userAgent = '+navigator.userAgent+'<br>');

 
2、浏览器版本(Browser Version

Q:如何检测浏览器版本?

A:不幸得是,navigator.appVersion在检测上浏览器版本上并不够好。例如,在很多支持JavaScript的浏览器,navigator.appVersion的值是兼容的Netscape Navigator的版本,而不是用户浏览器的实际版本。(甚至,在JavaScript应用的早期,Microsoft Internet Explorer 3的navigator.appVersion的返回值是2,就意味着它兼容于Netscape Navigator2。)

因此,要获得任何上述浏览器的完全版本数,你需要依赖navigator.userAgent的返回值,就像浏览器名称中的例子。下面就是你的浏览器的名称和版本:

 (源代码见文章浏览器名称

 

3、操作系统(Operating System

Q:如何检测客户机上的操作系统?

A:要检测客户机上的操作系统,脚本需要分析navigator.appVersion的值。下面就是一个简单的例子,它将操作系统的名称赋给OSName变量。

// This script sets OSName variable as follows:
// "Windows"    for all versions of Windows
// "MacOS"      for all versions of Macintosh OS
// "Linux"      for all versions of Linux
// "UNIX"       for all other UNIX flavors
// "Unknown OS" indicates failure to detect the OS

var OSName="Unknown OS";
if (navigator.appVersion.indexOf("Win")!=-1) OSName="Windows";
if (navigator.appVersion.indexOf("Mac")!=-1) OSName="MacOS";
if (navigator.appVersion.indexOf("X11")!=-1) OSName="UNIX";
if (navigator.appVersion.indexOf("Linux")!=-1) OSName="Linux";

document.write('Your OS: '+OSName);

在你的操作系统上,这段脚本的结果是:

 (要获得更详细的操作系统信息,脚本可以对navigator.appVersion做更加复杂的分析,但是原理是一样。)

 

4、屏幕尺寸(Screen Size

Q:如何获取客户机的屏幕尺寸?

A:要检测客户机的屏幕尺寸,可以使用属性screen.width和screen.height,这两个属性在主要浏览器的4上版本都被支持。如果你的用户使用Netscape Navigator 3并且启用了Java,你可以用Java调用来获得屏幕的宽和高(见下面的例子)。

下面的代码将屏幕的实际宽和高分别赋给了变量screenW和screenH,然后输出它们的值。如果用户使用的是旧版浏览器,那么screenW和sreenH就分别被赋值为640和480。

var screenW = 640, screenH = 480;
if (parseInt(navigator.appVersion)>3) {
 screenW = screen.width;
 screenH = screen.height;
}
else if (navigator.appName == "Netscape"
    && parseInt(navigator.appVersion)==3
    && navigator.javaEnabled()
   )
{
 var jToolkit = java.awt.Toolkit.getDefaultToolkit();
 var jScreenSize = jToolkit.getScreenSize();
 screenW = jScreenSize.width;
 screenH = jScreenSize.height;
}

document.write(
 "Screen width = "+screenW+"<br>"
+"Screen height = "+screenH
)

在你的浏览器中,代码输出为:

 

5、浏览器窗口尺寸(Browser Window Size

Q:如何获取浏览器窗口的尺寸?

A:要确定浏览器窗口的实际尺寸,可以使用下面的属性

  • 在Netscape Navigator 4中:window.innerWidth、window.innerHeight
  • 在Microsoft Internet Explorer中:document.body.offsetWidth、document.body.offsetHeight

注意,document.body.offsetWidht和document.body.offsetHeight必须在浏览器加载<BODY>标签完成后执行。

在下面的代码中,winW和winH分别被赋值为实际浏览器窗口的宽和高,然后被输出。如果用户使用旧版浏览器,那么winW和winH将分别被设为630和460。

var winW = 630, winH = 460;

if (parseInt(navigator.appVersion)>3) {
 if (navigator.appName=="Netscape") {
  winW = window.innerWidth;
  winH = window.innerHeight;
 }
 if (navigator.appName.indexOf("Microsoft")!=-1) {
  winW = document.body.offsetWidth;
  winH = document.body.offsetHeight;
 }
}

document.write(
 "Window width = "+winW+"<br>"
+"Window height = "+winH
)

在你的浏览器中,代码的执行结果是:

 

 

时间: 2024-08-02 09:40:13

JavaScript FAQ(二十二)——客户端信息的相关文章

JavaScript FAQ(十二)——层

 十.层   1. 层内放置外部文件(External Files Within Layers) Q:我可以在将外部的HTML文件作为页面的一部分显示吗? A:可以,你可以通过使用下面方法实现: LAYER或者ILAYER标记,SRC=FILENAME.HTM(在Netscape4中) IFRAME标记,SRC=FILENAME.HTM(在Explore4+ 和 Netscape 6中) 你可以使用JavaScript检测浏览器的名称和版本(见客户端信息),然后生成需要的IFRAME或者LAYE

云计算设计模式(二十二)——静态内容托管模式

云计算设计模式(二十二)--静态内容托管模式 部署静态内容到一个基于云的存储服务,可以直接向客户提供这些.这个模式可以减少潜在的昂贵的计算实例的需求. 景和问题 Web应用程序通常包括静态内容的一些元素.此静态内容可以包括HTML页面和诸如图像和可用到客户端的文件的其他资源,无论是作为一个HTML页的一部分(如嵌入式图像,样式表和客户端JavaScript文件)或作为单独的下载(如PDF文档). 尽管Web服务器以及调整通过有效的动态执行页代码和输出缓存优化的要求,他们仍然必须处理请求下载静态内

Windows 8风格应用开发入门 二十二 MessageDialog

MessageDialog概述 MessageDialog指的就是对话框. 对话框的命令栏中最多包含三个命令.如果我们指定任何命令,将会有一个默认命令添加到对话框中,目的是关闭对话框. 对话框弹出后界面中所有元素将在对话框下面显示,并且将会阻塞任何触摸事件直到用户进行响应对话框. 另外对话框应该尽量少用. 注意:Windows 8风格应用中取消了MessageBox对象,取而代之的是MessageDialog对象. MessageDialog常用属性和方法 MessageDialog类包含两类构

Android简明开发教程二十二:使用资源Resources

在前面的例子中,我们忽略了一个重要的原则,在代码和Layout中,直接使用了字符串常量,比如: <Button android:text="Pattern" android:id="@+id/btnPattern" android:layout_width="wrap_content" android:textColor="@color/black" android:checked="true" an

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)

C#开发WPF/Silverlight动画及游戏系列教程(Game Course):(二十二)重构 – 让代码插上翅膀自由飞翔 上一节,我将游戏地图模式进行了一次重大的变动,这在实际开发中意味着项目大规模重置,虽然表面上显得游刃有余,仅仅一个AllMove()方法的改变即实现了完美转型,这全得归功于前20节所搭建起的相对高度可扩展平台.但是,随着开发不断深入,我慢慢的感到些许的不安,因为代码上的日益松散与结构的渐渐稀疏如同Windows系统的磁盘碎片与日俱增,未来维护时的烦琐与痛心疾首已历历在目

Bootstrap &lt;基础二十二&gt;超大屏幕(Jumbotron)

原文:Bootstrap <基础二十二>超大屏幕(Jumbotron) Bootstrap 支持的另一个特性,超大屏幕(Jumbotron).顾名思义该组件可以增加标题的大小,并为登陆页面内容添加更多的外边距(margin).使用超大屏幕(Jumbotron)的步骤如下: 创建一个带有 class .jumbotron. 的容器 <div>. 除了更大的 <h1>,字体粗细 font-weight 被减为 200px. 下面的实例演示了这点: <!DOCTYPE

微信小程序把玩(二十二)action-sheet组件

原文:微信小程序把玩(二十二)action-sheet组件 action-sheet组件是从底部弹出可选菜单项,估计也是借鉴IOS的设计添加的,action-sheet有两个子组件, action-sheet-item为每个选项,action-sheet-cancel取消选项,与action-sheet-item中间会有间隔,并且点击会触发action-sheet监听事件 主要属性: wxml <!--触发action-sheet事件--> <button type="prim

JAVA之旅(二十二)——Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习

JAVA之旅(二十二)--Map概述,子类对象特点,共性方法,keySet,entrySet,Map小练习 继续坚持下去吧,各位骚年们! 事实上,我们的数据结构,只剩下这个Map的知识点了,平时开发中,也是能看到他的,所以还是非常值得去学习的一个知识点的,我们直接开车了 一.Map概述 泛型< k,v> 键值对,映射关系 基本特点 该集合存储键值对,是一对一对往里存,而且要保证键的唯一性 1.添加 put(key ,values) putAll() 2.删除 clear() remove(ob

JavaScript FAQ(十五)——鼠标事件(二)

 十二.鼠标事件   2. 左键 vs.右键(Left vs. Right Button) Q:我如何检查用户点击的是右键还是左键? A:click事件只在左键发生,因此onClick事件处理器不用进行左右键测试. 另一方面,mousedown和mouseup事件可能发生在鼠标的任何键上.要确定用户点击的是左键还是右键,可以使用下列事件属性: Netscape Navigator中 event.which Internet Explorer中 event.button 若这些属性的值是1,事件就