window.print()JavaScript的特征检测解决方案

时间:2014-02-04 23:56:19

标签: javascript printing browser-feature-detection

问题

有没有办法检测对window.print()的支持?我更喜欢检测这个功能本身,而不是试图检测我是在移动浏览器或桌面,iOS或Android或我可能在哪个特定的移动浏览器上。

背景

以下链接让我相信:

  • Apple要求所有第三方浏览器都使用UIWebView
  • 非Safari应用程序中使用的UIWebView在运行window.print()
  • 时不执行任何操作
  • iOS上的Safari在运行window.print()
  • 时会做适当的事情

链接:

P.S。我查看了Modernizr文档,看看它是否可以检测到对打印的支持,但没有发现任何内容。

P.P.S。我看到Chrome for iOS确实支持打印,尽管通过GCP。在这里,只是寻找功能检测而不是打印解决方案。 (https://support.google.com/chrome/answer/3049815?hl=en&ref_topic=1719889

修改 为了澄清,似乎window.print不是任何标准的一部分:https://developer.mozilla.org/en-US/docs/Web/API/Window.print。如果window.print存在于某些浏览器中但没有做任何有用的事情(例如,没有连接到适当的打印功能的任何特定于浏览器的实现),这最终是我想要检测的。

我的猜测是移动浏览器供应商会为window.print定义一些内容,以便尝试调用它的任何脚本都不会出错;但是调用可以是No op,或者可以向操作系统发送OS忽略的操作系统。

我越是想到这样做的胆量如何起作用,我就不那么有希望用一种简单的JavaScript方法来检测这个功能,这太糟糕了。

2 个答案:

答案 0 :(得分:2)

这个问题确实是Determine whether browser supports printing的重复。请参阅carpetsmoker对此问题的评论和提到的答案。我同意,这可能是我们现在能做的最好的事情。

即使window.print不是任何标准的一部分,如果浏览器供应商实施并同意某些API进行检测,那就太好了。也许他们都在内部正在为函数实现一个适当的实现,因此不想丢弃那些暂时没用的东西。哦,好吧。

答案 1 :(得分:1)

更新

试试这个:

function supportPrint() {   
     return (typeof(window.print) === 'function');
}