JavaScript的用户代理嗅探服务器

安装次数: 4,670

依赖关系: 0

建议者: 0

安全性: 0

星标: 38

关注者: 8

分支: 13

语言:JavaScript

类型:项目

v2.0.13 2022-04-12 10:23 UTC

README

这是一个极其复杂且几乎完全无用的浏览器嗅探库。之所以无用,是因为你不应该使用浏览器嗅探。所以,立即停止,去阅读一些关于功能检测的内容。我是认真的。走吧。将来你会感谢我的。

WhichBrowser/Server

本项目通过WhichBrowser搭建服务器,公开API用于浏览器检测,可以在浏览器中使用JavaScript。本项目使用WhichBrowser/Parser-PHP库进行实际的用户代理嗅探。

Build Status License Latest Stable Version

Twitter Follow

也提供以下版本

要求

服务器应能够处理PHP(5.4或更高版本),并包含一个.htaccess文件,指示服务器将detect.js用作detect.php的别名。这不是必需的,但如果你的服务器不支持.htaccess文件,你可能需要找到一种方法让服务器执行相同的操作。或者,你也可以直接使用detect.php

如何安装

你可以使用Composer安装WhichBrowser - PHP的标准包管理器。这个包的名称是whichbrowser/server。这将为PHP解析器库设置所有依赖项。转到你的Web服务器上的一个空目录,如你想要安装WhichBrowser的域的wwwpublic_html目录。

composer create-project whichbrowser/server .

这将将在当前目录中安装服务器并安装whichbrowser/parser依赖项。你可以通过运行简单的命令轻松更新解析器库。

composer update

你应该尽可能经常运行此命令。你可能甚至想考虑为此设置一个cron作业。

如何使用

第一步是在你的网页上放置一段代码。

<script>
    (function(){var p=[],w=window,d=document,e=f=0;p.push('ua='+encodeURIComponent(navigator.userAgent));e|=w.ActiveXObject?1:0;e|=w.opera?2:0;e|=w.chrome?4:0;
    e|='getBoxObjectFor' in d || 'mozInnerScreenX' in w?8:0;e|=('WebKitCSSMatrix' in w||'WebKitPoint' in w||'webkitStorageInfo' in w||'webkitURL' in w)?16:0;
    e|=(e&16&&({}.toString).toString().indexOf("\n")===-1)?32:0;p.push('e='+e);f|='sandbox' in d.createElement('iframe')?1:0;f|='WebSocket' in w?2:0;
    f|=w.Worker?4:0;f|=w.applicationCache?8:0;f|=w.history && history.pushState?16:0;f|=d.documentElement.webkitRequestFullScreen?32:0;f|='FileReader' in w?64:0;
    p.push('f='+f);p.push('r='+Math.random().toString(36).substring(7));p.push('w='+screen.width);p.push('h='+screen.height);var s=d.createElement('script');
    s.src='//yourserver/whichbrowser/detect.js?' + p.join('&');d.getElementsByTagName('head')[0].appendChild(s);})();
</script>

请确保将detect.js文件的URL更改为指向你自己的服务器。

要获取所需的精确片段,请在浏览器中访问你安装WhichBrowser的目录。

第二步是创建一个新的WhichBrowser对象。此对象将包含库能找到的关于你的浏览器的一切信息。

例如

result = new WhichBrowser();

变量result现在包含一个对象,你可以查询其中的信息。有各种方式来访问这些信息。

首先,你可以将对象作为字符串处理以获取可读的标识

"You are using " + result
// You are using Chrome 27 on Mac OS X 10.8.4

如果需要,你也可以显式地将对象转换为字符串

String(result)
result.toString()

或者,你可以将对象转换为JSON

JSON.stringify(result)
// { "browser": {"name":"Chrome","version":{"value":"27"...

另一种可能是查询对象

result.isType('desktop')
// true

result.isType('mobile', 'tablet', 'media')
// false

result.isBrowser('Maxthon', '<', '4.0.5')
// false

result.isOs('iOS', '>=', '5')
// false

result.isEngine('Blink')
// true

你也可以直接访问这些属性

result.browser
// Chrome 27

result.engine
// Blink

result.os
// Mac OS X 10.8.4

或者直接访问这些属性的某些部分

result.browser.name
// Chrome

result.browser.name + ' ' + String(result.browser.version)
// Chrome 27

result.browser.version.major
// 27

result.browser.version.minor
// 0

result.browser.version.original
// 27.0.1453.110

result.engine.name
// Blink

最后,你也可以直接查询版本

result.browser.version.is('>', 26)
// true

result.os.version.is('<', '10.7.4')
// false

API参考

WhichBrowser对象

创建新的WhichBrowser对象后,它包含了一些属性和函数。所有这些属性都保证存在。

属性

  • browser 包含有关浏览器本身信息的对象
  • engine 包含有关渲染引擎信息的对象
  • os 包含有关操作系统信息的对象
  • device 包含有关设备信息的对象

函数

isType(type [,type [,type [,type]]]) 如果只使用一个参数,当参数与 device 对象的 type 属性匹配时,函数返回 true。它可以使用多个参数,在这种情况下,如果其中一个参数匹配,函数则返回 true。如果没有参数匹配,则返回 false

isBrowser(name [, comparison, version]) 用于查询 browser 对象的 nameversion 属性。该函数可以包含一个参数,用于基于 name 的简单比较,或者包含三个参数,用于比较 nameversion。第一个参数始终包含浏览器的名称。第二个参数是一个字符串,可以包含 <<===>>。第三个参数是一个整数、浮点数或字符串,其中包含版本。您可以使用类似 1010.7'10.7.4' 的版本。有关版本比较执行的更多信息,请参阅 Version 对象的 is() 函数。

isEngine(name [, comparison, version]) 用于查询 engine 对象的 nameversion 属性。此函数与 isBrowser 函数完全相同。

isOs(name [, comparison, version]) 用于查询 os 对象的 nameversion 属性。此函数与 isBrowser 函数完全相同。

浏览器对象

Browser 对象用于主 WhichBrowser 对象的 browser 属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。

属性

  • name 包含浏览器名称的字符串
  • version 包含有关浏览器版本信息的版本对象
  • stock 一个布尔值,如果浏览器是操作系统的默认浏览器则为 true,否则为 false
  • channel 包含分发渠道的字符串,即 'Nightly' 或 'Next'。
  • mode 可以包含浏览器操作模式的字符串,例如 'proxy'。
  • hidden 一个布尔值,如果浏览器没有名称且是操作系统的默认浏览器则为 true。

引擎对象

Engine 对象用于主 WhichBrowser 对象的 engine 属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。

属性

  • name 包含渲染引擎名称的字符串
  • version 包含有关渲染引擎版本信息的版本对象

操作系统对象

Os 对象用于主 WhichBrowser 对象的 os 属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。

属性

  • name 包含操作系统名称的字符串
  • version 包含有关操作系统版本信息的版本对象

设备对象

Device 对象用于主 WhichBrowser 对象的 device 属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。

属性

  • type 包含浏览器类型的字符串
  • identified 一个布尔值,如果设备已被正面识别则为 true
  • manufacturer 包含设备制造商的字符串,例如 'Apple' 或 'Samsung'。
  • model 包含设备型号的字符串,例如 'iPhone' 或 'Galaxy S4'。

type 属性可以包含以下列表中的任何值

  • 桌面
  • 移动
  • 平板电脑
  • 游戏
  • 耳机
  • 电子阅读器
  • 媒体
  • 模拟器
  • 电视
  • 显示器
  • 相机
  • 标牌
  • 白板
  • 汽车
  • POS
  • 机器人

版本对象

Version 对象用于表示 browserengineos 对象的 version 属性,并包含多个属性和函数。如果某个属性在此情况下不适用,则它将为 null。

属性

  • original 包含原始版本号的字符串。
  • alias 包含版本号的别名的字符串,例如 Windows 的 'XP' 或 '5.1'。
  • details 包含应打印的版本号数字的整数。
  • major 包含主版本号的整数。
  • minor 包含次要版本号的整数。
  • type 包含类型指示符的字符串,例如 'beta' 或 'alpha'。

函数

is(version)is(comparison, version) 使用此函数可以轻松比较两个版本。如果您只指定一个参数,此函数将返回版本是否相同。您也可以指定两个参数,在这种情况下,第一个参数包含比较运算符,如 <<===>>。第二个参数是要比较的版本。您可以使用类似 1010.7'10.7.4' 的版本,但请注意,10 不等于 10.0。例如,如果我们的操作系统版本是 10.7.4

result.os.version.is('10.7.4')
// true

result.os.version.is('10.7')
// true

result.os.version.is('10')
// true

result.os.version.is('10.0')
// false

result.os.version.is('>', '10')
// false

result.os.version.is('>', '10.7')
// false

result.os.version.is('>', '10.7.3')
// true

许可证

版权所有 (c) 2015 Niels Leenheer

在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的人(“任何人”),在不限制的情况下使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件提供的人这样做,但受以下条件约束

上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。

软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,是否因软件或其使用或其他方式而产生、源自或与之有关。