【问题标题】:Detect if user has printing capabilities?检测用户是否具有打印功能?
【发布时间】:2012-08-26 08:13:38
【问题描述】:

客户要求将打印按钮添加到他们的网站,并希望对无法打印的用户隐藏该按钮,例如大多数移动设备。

有没有什么方法可以通过 JavaScript 来检测客户端是否具有打印功能?

【问题讨论】:

  • 一句话,没有。浏览器不知道任何有关附加设备的信息。您当然可以判断客户端是否是移动的,并隐藏移动设备的按钮,但您无法判断存在打印机的任何信息。
  • 这是针对公共 Internet 站点(在这种情况下不可能)还是针对私有 Intranet 站点?如果是用于 Intranet 站点,您是否需要特定的浏览器,是否可以安装插件,例如ActiveX?
  • ...并且知道设备是“移动”的也很困难,因为最近野外设备种类的数量增长如此之快。
  • 而且,许多移动设备可以打印,尤其是打印到文件!
  • “例如大多数移动设备。”嗯...空气打印?大多数移动设备可以打印。这是个坏主意。

标签: javascript html css printing


【解决方案1】:

这个要求是有缺陷的,因为大多数用户代理都可以“打印”,而 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)"/>

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      几个澄清。 WURFL 不使用正则表达式,或者至少不以评论似乎暗示的方式使用。一些特别难以分析的 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。

      【讨论】:

      • 这并不是问题的真正答案;我认为您的意思是将其添加为对提到 WURFL 的答案的评论。
      猜你喜欢
      • 1970-01-01
      • 2013-08-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-04
      • 1970-01-01
      • 2011-05-29
      • 2017-04-06
      相关资源
      最近更新 更多