检测用户是否具有打印功能

Detect if user has printing capabilities?

本文关键字:打印 功能 用户 是否 检测      更新时间:2023-09-26

一个客户要求在其网站上添加一个打印按钮,并希望为无法打印的用户(例如大多数移动设备)隐藏该按钮。

是否有任何方法通过JavaScript来检测客户端是否具有打印功能?

该要求存在缺陷,因为大多数用户代理都可以"打印",而UA是否可以打印的知识不是网站业务。

许多移动浏览器可以打印,大多数网络浏览器即使没有打印机也可以打印(打印到pdf、云打印等)。对于任何用户代理来说,在用户不知情的情况下明确声明其打印功能都是一个安全问题。这就是打印样式表的作用(因此网站根本不必知道它是否正在打印)。

你可以做的是用小屏幕隐藏用户代理上的按钮,这些用户仍然可以使用用户代理本身打印他们的文档。您还可以检测特定的用户代理并隐藏它们的按钮。

链接

http://www.alistapart.com/articles/return-of-the-mobile-stylesheet:讨论了移动样式表和相关问题。

http://mobile.smashingmagazine.com/2010/11/03/how-to-build-a-mobile-website/#mobile-样式表:更多关于移动样式表的信息。

基本移动样式表附件:

<link rel="stylesheet" href="mobile.css" media="handheld" />

按屏幕大小检测:

<link rel="stylesheet" href="mobile.css" media="only screen and (max-device width:480px)"/>

如果WURFL正则表达式对您的应用程序来说太慢,或者您正在使用清漆、squid或任何其他不允许您使用WURFL的东西,您可以尝试使用JS(navigator.userAgent)分析用户代理字符串,并找到类似"iOS版本4+"的内容,因为至少这些设备具有打印功能(只要它们可以通过网络打印机连接到网络)。这是一个简单的解决方案(但永远不会覆盖所有iOS设备,因为它们有太多不同的用户代理字符串)。

你可以在这里找到很多用户代理字符串的例子:http://deviceatlas.com/

几个澄清。WURFL没有使用RegExps,或者至少没有以注释所暗示的方式使用。对于某些特别难以分析的UA,可能会涉及RegExp,但对于每个UA,这种情况只发生一次,然后缓存匹配。

此外,ScientiaMobile最近宣布为Varnish Cache、Apache和NGINX提供WURFL模块,因此现在可以在"网络"级别使用WURFL。

此页面包含更多详细信息:http://www.scientiamobile.com/blog/post/view/id/25/title/HTTP-and-Mobile%3A-丢失的标题-

最后免责声明:我知道这些事情是因为我是WURFL的创建者和ScientiaMobile的CTO。