Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/html/85.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 检测用户是否具有打印功能?_Javascript_Html_Css_Printing - Fatal编程技术网

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

Javascript 检测用户是否具有打印功能?,javascript,html,css,printing,Javascript,Html,Css,Printing,客户要求在其网站中添加打印按钮,并希望为没有打印能力的用户(例如大多数移动设备)隐藏该按钮 有没有办法通过JavaScript检测客户端是否具有打印功能 如果WURFL正则表达式对于您的应用程序来说太慢,或者您正在使用varnish、squid或其他任何不允许您使用WURFL的东西,那么您可以尝试使用JS(navigator.userAgent)分析用户代理字符串,并找出类似“iOS version 4+”的内容,因为至少这些设备具有打印功能这是一个简单的解决方案(但不会覆盖所有iOS设备,因为

客户要求在其网站中添加打印按钮,并希望为没有打印能力的用户(例如大多数移动设备)隐藏该按钮


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

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

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

这一要求存在缺陷,因为大多数用户代理都可以“打印”,而UA是否可以打印的知识并不取决于网站业务

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

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

链接

:讨论移动样式表和相关问题

:有关移动样式表的详细信息

基本移动样式表附件:

按屏幕大小检测:


两个澄清。WURFL不使用regexp,或者至少不以注释所暗示的方式使用regexp。对于某些特别难以分析的UA,可能会涉及regexp,但在缓存匹配后,每个UA只会发生一次

此外,ScientiaMobile最近宣布,Varnish Cache、Apache和NGINX提供了一个WURFL模块,因此现在可以在“网络”级别使用WURFL

此页面包含更多详细信息:


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

总之,不。浏览器不会了解任何有关连接设备的信息。你当然可以知道客户端是否是移动的,并隐藏移动设备的按钮,但你不能告诉任何关于状态打印机的信息。这是为publi设计的吗c internet站点(在这种情况下是不可能的)或专用intranet站点?如果是intranet站点,您是否需要特定的浏览器,是否可以安装插件,例如ActiveX?…并知道设备是“移动的”这也相当困难,因为野生设备种类的数量最近增长如此之快。而且,许多移动设备可以打印,尤其是打印到文件中!”例如,大多数移动设备嗯……Airprint?大多数移动设备都可以打印。这是个坏主意。这并不是问题的答案;我想你是想在提到WURFL的答案上加上这个作为评论。