Notice: register_sidebar的调用方法不正确。“边栏1”侧边栏的参数数组中未设置id,缺省为“sidebar-1”。要消除此通知并保持现有的侧边栏内容,请手动将id设置为“sidebar-1”。 请查阅调试WordPress来获取更多信息。 (这个消息是在4.2.0版本添加的。) in /data/htdocs/seven2_blog/wp-includes/functions.php on line 3853
Windows Internet Explorer 会将什么内容报告为用户代理字符串? | Seventwo Blog
Warning: Parameter 1 to wp_default_scripts() expected to be a reference, value given in /data/htdocs/seven2_blog/wp-includes/plugin.php on line 601

Windows Internet Explorer 会将什么内容报告为用户代理字符串?

2010-02-12 | 分类: 浏览器

注意:本文档是预备文档,随时可能变更。

用户代理字符串是通过 HTTP 通信报告给网站的浏览器的标识。Web 开发人员可以使用用户代理字符串检测查看器正在使用哪个浏览器版本查看网站。了解浏览器检测的最佳实践,可确保在 Windows Internet Explorer 8 客户端查看网站时,该网站继续按预期方式运行。

此文档将介绍用户代理字符串的结构,以及 Windows Internet Explorer 向服务器报告的值。此外,还提供一些示例代码,帮助 Web 开发人员实现和维护建议的浏览器检测方法。

了解用户代理字符串

当您请求某个网页时,您的浏览器会将多个标头发送到承载您正在访问的站点的 Web 服务器。每个标头包含的详细信息可以帮助 Web 服务器确定提供您所请求的信息的最佳方法。称为“用户代理”的标头可以确定从该服务器上请求信息的应用程序。用户代理字符串可以包含称为“标记”的可选详细信息,这些信息由括号括起来,随不同的程序而有所不同。Windows Internet Explorer 使用标记描述有关您的计算机系统的详细信息。

图 1 显示了由 Windows Internet Explorer 报告的用户代理字符串示例,其标记突出显示。

图 1

[singlepic id=282 w=504 h=360 float=]

由于历史原因,Windows Internet Explorer 将自身标识为 Mozilla 4.0 浏览器。

以上用户代理字符串示例包含三个标记:

  • 兼容性标志(此处显示为“compatible”),现今的大多数浏览器都使用它。它指示 Windows Internet Explorer 与一组公共功能兼容。
  • 版本标记,标识浏览器并包含版本号。图 1 中的版本标记(“MSIE 8.0”)标识 Windows Internet Explorer 8。Windows Internet Explorer 7 返回的版本标记是“MSIE 7.0”。
  • 平台标记,标识操作系统并包含版本号。图 1 中的平台标记(“Windows NT 6.0”)表示 Windows Vista。

在图 1 中,Windows Internet Explorer 8 是用户代理。不过,当其他应用程序通过 Internet 联系服务器时也会提供用户代理字符串。

通过将以下代码行键入地址栏中,可轻松确定所使用的浏览器发送的用户代理字符串的内容。

javascript:alert(navigator.userAgent)

此代码运行时,将显示弹出警告消息,其中包含浏览器的完整用户代理字符串。

有关用户代理字符串的详细信息,请参阅了解用户代理字符串。

使用用户代理字符串的浏览器检测

可使用客户端脚本来分析用户代理字符串并从版本标记中提取版本号以检测 Windows Internet Explorer。

以下代码示例显示了两个 Microsoft Jscript 函数,它们都表示用于确定查看器正在使用哪个版本的 Windows Internet Explorer 的最佳技术。

JScript 代码

function getInternetExplorerVersion()
// 返回 Windows Internet Explorer 的版本或 -1
// (指示使用另一种浏览器。)
{
   var rv = -1; // 返回值假定失败。
   if (navigator.appName == 'Microsoft Internet Explorer')
   {
      var ua = navigator.userAgent;
      var re  = new RegExp("MSIE ([0-9]{1,}[\.0-9]{0,})");
      if (re.exec(ua) != null)
         rv = parseFloat( RegExp.$1 );
   }
   return rv;
}
function checkVersion()
{
   var msg = "您没有使用 Windows Internet Explorer。";
   var ver = getInternetExplorerVersion();
   if ( ver> -1 )
   {
      if ( ver>= 8.0 )
         msg = "您正在使用 Windows Internet Explorer 的最新版本。"
      else
         msg = "您应该升级您的 Windows Internet Explorer 版本。";
    }
   alert( msg );
}

在本示例中,getInternetExplorerVersion() 函数分析由浏览器发送的用户代理字符串并返回版本号。checkVersion() 函数调用 getInternetExplorerVersion() 并将返回值与您希望检测的版本号(在本示例中为 Version 8)进行比较。您应注意到我们使用的是大于等于比较。这可以确保该函数适用于 Windows Internet Explorer 的将来版本,这样就不必在 Windows Internet Explorer 的新版本发布后更新代码。

其他浏览器检测技术

版本向量是指 Windows Internet Explorer 的内部版本号,它存储在浏览器启动时读取的注册表项中。条件注释可与版本向量一起使用来检测浏览器版本。除版本向量之外,您还可以使用用户代理字符串检测查看网站所用的浏览器。有关版本向量和如何使用版本向量检测浏览器版本的详细信息,请参阅版本向量

使用客户端脚本的一个优点是可以检测除 Windows Internet Explorer 外的浏览器,而且脚本比条件注释更加灵活。如果检测专门针对 Windows Internet Explorer,则条件注释(如自定义 CSS 设置)更为有效。