whichbrowser / server
JavaScript的用户代理嗅探服务器
Requires
- php: >=5.4.0
- ralouphie/getallheaders: ~0.1.7
- whichbrowser/parser: ^2.0.20
README
这是一个极其复杂且几乎完全无用的浏览器嗅探库。之所以无用,是因为你不应该使用浏览器嗅探。所以,立即停止,去阅读一些关于功能检测的内容。我是认真的。走吧。将来你会感谢我的。
WhichBrowser/Server
本项目通过WhichBrowser搭建服务器,公开API用于浏览器检测,可以在浏览器中使用JavaScript。本项目使用WhichBrowser/Parser-PHP库进行实际的用户代理嗅探。
也提供以下版本
-
WhichBrowser/Parser-PHP
服务器端使用的WhichBrowser的PHP版本 -
WhichBrowser/Parser-JavaScript
服务器端Node.js使用的WhichBrowser的JavaScript版本
要求
服务器应能够处理PHP(5.4或更高版本),并包含一个.htaccess
文件,指示服务器将detect.js
用作detect.php
的别名。这不是必需的,但如果你的服务器不支持.htaccess
文件,你可能需要找到一种方法让服务器执行相同的操作。或者,你也可以直接使用detect.php
。
如何安装
你可以使用Composer安装WhichBrowser - PHP的标准包管理器。这个包的名称是whichbrowser/server
。这将为PHP解析器库设置所有依赖项。转到你的Web服务器上的一个空目录,如你想要安装WhichBrowser的域的www
或public_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
对象的 name
和 version
属性。该函数可以包含一个参数,用于基于 name
的简单比较,或者包含三个参数,用于比较 name
和 version
。第一个参数始终包含浏览器的名称。第二个参数是一个字符串,可以包含 <
、<=
、=
、=>
或 >
。第三个参数是一个整数、浮点数或字符串,其中包含版本。您可以使用类似 10
、10.7
或 '10.7.4'
的版本。有关版本比较执行的更多信息,请参阅 Version
对象的 is()
函数。
isEngine(name [, comparison, version])
用于查询 engine
对象的 name
和 version
属性。此函数与 isBrowser
函数完全相同。
isOs(name [, comparison, version])
用于查询 os
对象的 name
和 version
属性。此函数与 isBrowser
函数完全相同。
浏览器对象
Browser
对象用于主 WhichBrowser
对象的 browser
属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。
属性
name
包含浏览器名称的字符串version
包含有关浏览器版本信息的版本对象stock
一个布尔值,如果浏览器是操作系统的默认浏览器则为 true,否则为 falsechannel
包含分发渠道的字符串,即 'Nightly' 或 'Next'。mode
可以包含浏览器操作模式的字符串,例如 'proxy'。hidden
一个布尔值,如果浏览器没有名称且是操作系统的默认浏览器则为 true。
引擎对象
Engine
对象用于主 WhichBrowser
对象的 engine
属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。
属性
name
包含渲染引擎名称的字符串version
包含有关渲染引擎版本信息的版本对象
操作系统对象
Os
对象用于主 WhichBrowser
对象的 os
属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。
属性
name
包含操作系统名称的字符串version
包含有关操作系统版本信息的版本对象
设备对象
Device
对象用于主 WhichBrowser
对象的 device
属性,并包含多个属性。如果某个属性不适用于这种情况,它将是 null。
属性
type
包含浏览器类型的字符串identified
一个布尔值,如果设备已被正面识别则为 truemanufacturer
包含设备制造商的字符串,例如 'Apple' 或 'Samsung'。model
包含设备型号的字符串,例如 'iPhone' 或 'Galaxy S4'。
type
属性可以包含以下列表中的任何值
- 桌面
- 移动
- 平板电脑
- 游戏
- 耳机
- 电子阅读器
- 媒体
- 模拟器
- 电视
- 显示器
- 相机
- 标牌
- 白板
- 汽车
- POS
- 机器人
版本对象
Version
对象用于表示 browser
、engine
和 os
对象的 version
属性,并包含多个属性和函数。如果某个属性在此情况下不适用,则它将为 null。
属性
original
包含原始版本号的字符串。alias
包含版本号的别名的字符串,例如 Windows 的 'XP' 或 '5.1'。details
包含应打印的版本号数字的整数。major
包含主版本号的整数。minor
包含次要版本号的整数。type
包含类型指示符的字符串,例如 'beta' 或 'alpha'。
函数
is(version)
或 is(comparison, version)
使用此函数可以轻松比较两个版本。如果您只指定一个参数,此函数将返回版本是否相同。您也可以指定两个参数,在这种情况下,第一个参数包含比较运算符,如 <
、<=
、=
、=>
或 >
。第二个参数是要比较的版本。您可以使用类似 10
、10.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
在此特此授予任何获得此软件及其相关文档文件(“软件”)副本的人(“任何人”),在不限制的情况下使用软件的权利,包括但不限于使用、复制、修改、合并、发布、分发、再许可和/或销售软件副本的权利,并允许软件提供的人这样做,但受以下条件约束
上述版权声明和本许可声明应包含在软件的所有副本或主要部分中。
软件按“原样”提供,不提供任何明示或暗示的保证,包括但不限于适销性、特定目的适用性和非侵权性保证。在任何情况下,作者或版权所有者均不对任何索赔、损害或其他责任负责,无论此类责任是基于合同、侵权或其他方式,是否因软件或其使用或其他方式而产生、源自或与之有关。