【问题标题】:Feature detection solution for window.print() JavaScriptwindow.print() JavaScript 的特征检测解决方案
【发布时间】:2014-02-04 23:56:19
【问题描述】:

问题

有什么方法可以检测对 window.print() 的支持吗?我更愿意检测功能本身,而不是尝试检测我是在移动浏览器还是桌面、iOS 或 Android 上,或者我可能在哪个特定的移动浏览器上。

背景

以下链接让我相信:

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

链接:

附:我查看了 Modernizr 文档,看看它是否可以检测到对打印的支持,但没有发现任何东西。

附言我看到 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,或者可能会向操作系统发送请求,而操作系统只是忽略了该请求。

我越想它的胆量如何工作,我就越不希望使用简单的 JavaScript 方法来检测该功能,这太糟糕了。

【问题讨论】:

  • 重复:stackoverflow.com/questions/9268840/…(由于赏金无法举报)
  • (ab) 使用print() 的阻塞特性的答案是您最好的猜测。我也有同样的想法,想不到更好的了。但它实际上并没有检测到支持,它只是告诉你 window.print() 是否真的做了什么......
  • @Carpetsmoker 您介意添加对重复问题(以及您提到的答案)的引用作为此问题的答案吗?如果你愿意,我会把赏金扔给你并接受你的答案,因为这是我能想到的对副本的“正确”答案:)
  • 酷,我实际上在另一个论坛上找到了这个。我应该删除我的答案吗?看到滥用反对票根本没有帮助我。我只是想帮助您找到解决方案,但鉴于您已经接受了自己的答案,在我尝试帮助这里的任何人之前,我可能应该三思而后行。
  • 无意冒犯,伙计。老实说,对您的回答投反对票的人都不是我。如果有人发布了一个问题,后来发现了答案(即使答案是“哦,有一个我以前没有注意到的重复项”),将其发布为答案是合适的,如果没有其他人提供更可接受的答案,接受自己的答案。即使是被否决的答案也可以提供有关该问题的有用信息,因此我认为不删除它会增加 SO 的有用性。

标签: javascript printing browser-feature-detection


【解决方案1】:

这个问题确实是Determine whether browser supports printing的重复。请参阅地毯吸烟者对这个问题的评论和提到的答案。我同意,这可能是我们目前能做的最好的事情了。

即使 window.print 不是任何标准的一部分,如果浏览器供应商实施并同意一些用于检测的 API,那就太好了。也许他们都在内部为该函数开发一个适当的实现,所以不想把一些临时的东西扔在那里,以后会没用。哦,好吧。

【讨论】:

    【解决方案2】:

    更新

    试试这个:

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

    【讨论】:

    • return (typeof(window.print)==='function')
    • 在运行 iOS 4.2.1 的 iPhone 3G 上尝试以下代码会产生“工作”:try { window.print(); alert ('worked'); } catch (e) { alert('exception'); }。我认为在 window.print 什么都不做的浏览器上,它是一个函数,但内部实现可能是无操作的。如果 window.print 不是函数或未定义,脚本就会中断。所以它必须在那里;只是似乎没有很好的方法来查看它是否有用。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-04-20
    • 1970-01-01
    • 1970-01-01
    • 2020-12-01
    相关资源
    最近更新 更多