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

时间:2012-08-31 13:39:54

标签: javascript html css printing

客户已要求在其网站上添加打印按钮,并希望将其隐藏给无法打印功能的用户,例如:大多数移动设备。

有没有办法通过JavaScript来检测客户端是否具有打印功能?

3 个答案:

答案 0 :(得分:1)

这个要求是有缺陷的,因为大多数用户代理都可以打印"并且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-stylesheets:有关移动样式表的更多信息。

基本的移动样式表附件:

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

按屏幕尺寸检测:

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

答案 1 :(得分:0)

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

您可以在此处找到大量用户代理字符串示例: http://deviceatlas.com/

答案 2 :(得分:-1)

几点澄清。 WURFL不使用RegExps,或者至少不使用评论所暗示的方式。 RegExps可能涉及一些特别难以分析的UA,但这只会在每次UA发生一次,然后缓存匹配。

此外,ScientiaMobile最近宣布推出用于Varnish Cache,Apache和NGINX的WURFL模块,因此现在可以在“网络”级别使用WURFL。

此页面包含更多详细信息:http://www.scientiamobile.com/blog/post/view/id/25/title/HTTP-and-Mobile%3A-The-Missing-Header-

最后是免责声明:我知道这些事情,因为我是WURFL创建者和ScientiaMobile的首席技术官。