客户要求将打印按钮添加到他们的站点,并希望对没有打印能力的用户(例如大多数移动设备)隐藏该按钮。
有什么方法可以通过 JavaScript 来检测客户端是否具有打印功能?
客户要求将打印按钮添加到他们的站点,并希望对没有打印能力的用户(例如大多数移动设备)隐藏该按钮。
有什么方法可以通过 JavaScript 来检测客户端是否具有打印功能?
该要求是有缺陷的,因为大多数用户代理都可以“打印”,而 UA 是否可以打印的知识并不是网站业务。
许多移动浏览器可以打印,即使没有连接打印机(打印到 pdf、云打印等),大多数 Web 浏览器也可以打印。对于任何用户代理来说,在用户不知情的情况下明确说明其打印功能的任何内容都是一个安全问题。这就是打印样式表的用途(因此网站根本不必知道它是否正在打印)。
您可以做的是隐藏小屏幕用户代理上的按钮,这些用户仍然可以使用用户代理本身打印他们的文档。您还可以检测特定的用户代理并为其隐藏按钮。
链接
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)"/>
如果 WURFL 正则表达式对您的应用程序来说太慢,或者您正在使用 varnish、squid 或其他任何不允许您使用 WURFL 的东西,您可能只是尝试使用 JS (navigator.userAgent) 分析用户代理字符串和找出诸如“iOS 4+”之类的内容,因为至少这些设备具有打印功能(只要它们位于带有网络打印机的网络范围内)。这是一个简单的解决方案(但永远不会涵盖所有 iOS 设备,因为它们有太多不同的用户代理字符串)。
您可以在此处找到大量用户代理字符串示例:http: //deviceatlas.com/
几个澄清。WURFL 不使用正则表达式,或者至少不以评论似乎暗示的方式使用。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 的 CTO。