检测用户是否具有打印功能
Detect if user has printing capabilities?
一个客户要求在其网站上添加一个打印按钮,并希望为无法打印的用户(例如大多数移动设备)隐藏该按钮。
是否有任何方法通过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。
- JavaScript打印功能使日历停止工作
- Rhino打印功能
- 检测用户是否具有打印功能
- ScriptX 打印功能在 IE8 中不起作用
- 打印功能在Chrome中无法正常工作
- Angular UI TinyMCE,如何设置打印功能
- 自定义打印功能,打印内容未显示在第一个事件触发器上
- 如何使用 MVC4 C# 禁用 iframe 中的打印功能和只读文件
- 屏幕阅读器和 JavaScript 打印功能
- 如何在 javascript 中取消打印功能后重新加载脚本
- 如何使用PHP打印功能打印图像
- Openlayers打印功能
- 是否可以重新定义JavaScript打印功能
- 无法使用JavaScript打印功能打印图像
- Chrome中的打印功能不再工作
- JQuery 打印功能无法打印
- IE7&IE8 javascript打印功能
- 如何打印jqgrid与导航栏上的onclick打印功能
- 打印功能不能正常工作
- 打印功能后无法点击其他选项卡