设备检测不基于UA

3zz*_*zzy 1 javascript user-agent device

我希望仅限制我的webapp用于手持设备,并完全禁用桌面.

有大量的库可用于设备检测,但所有的嗅探用户代理都很容易被伪造.是否有任何超出UA的库并使用其他检查来确保设备确实是掌上电脑?

nal*_*inc 6

不确定它是否有用,但我想在两个部分中解决您的问题:

我希望仅限制我的webapp用于手持设备,并完全禁用桌面.

嗯,这在技术上是不可行的,因为@ guest271314(和其他评论)提到的原因.此外,有许多软件应用程序,其唯一任务是模拟桌面设备上的移动环境,并且几乎所有软件应用程序都使用UA嗅探.回到第二个查询,

是否有任何超出UA的库并使用其他检查来确保设备确实是掌上电脑?

如果您想了解访问服务的浏览器和设备的性质,可以采用以下几种方法来完成此任务:

  • 用户代理嗅探
  • 特征检测
  • 设备检测

不幸的是,有些人有时会混淆这些.然而,发现HTTP客户端属性的这些方法中的每一种都以不同的方式工作,并且最重要的是,它们经常在技术堆栈中扮演不同的角色.

用户代理嗅探

通过"用户代理嗅探"(UA Sniffing),可以通过查看 HTTP请求中的User-Agent标头来派生客户端的属性.UA嗅探通常涉及在UA字符串中搜索特定字符串或模式,并根据搜索结果进行选择. 虽然UA Sniffing可以在客户端本身使用JavaScript完成,但没有什么能阻止人们在服务器上执行UA Sniffing.UA嗅闻也有一些垮台.首先是:沿着不断更新您的站点和服务的滑坡,跟随浏览器和设备市场的永无止境的发展.其次,UA也可以伪造(正如你在帖子中提到的那样).

特征检测

它是我们不测试User-Agent字符串的方法,而是我们测试浏览器声称支持的功能.特征检测是关于使用JavaScript检查浏览器的某些功能或特征.查看查询的上下文,这是您可能正在寻找的内容.

特征检测也有缺点.最致命的一种叫做"误报".例如,您对浏览器的测试告诉您"是的,我支持此功能!消防!",只是发现Geolocation并不真正支持.

最常用的特征检测工具是Modernizr.

设备检测

设备检测是指具有将HTTP请求映射到移动设备属性的完整配置文件的框架,包括与浏览器和操作系统相关的属性.它通常发生在服务器上,并且具有仅发送客户端可以轻松解析并用于浏览器的内容和格式的附加优势.

有些人倾向于将UA-Sniffing与设备检测混淆.为了公平起见,设备检测确实利用HTTP请求的分析(特别是用户代理字符串)来进行操作.但相似之处到此为止.一个完善的设备检测框架,如WURFL,将不遗余力地避免误报,最重要的是,它将返回UA分析无法获得的设备属性和功能.

希望能帮助到你