window.print()JavaScript的功能检测解决方案 问题:

window.print()JavaScript的功能检测解决方案 问题:,javascript,printing,browser-feature-detection,Javascript,Printing,Browser Feature Detection,有没有办法检测对window.print()的支持?我更喜欢检测功能本身,而不是试图进入兔子洞,检测我是否在移动浏览器、桌面、iOS或Android上,或者我可能在哪个特定的移动浏览器上 背景 以下链接使我相信: 苹果要求所有第三方浏览器使用UIWebView 运行window.print()时,非Safari应用程序中使用的UIWebView不会执行任何操作 当您运行window.print()时,iOS上的Safari会执行一些适当的操作 链接: 另外,我查看了Modern

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

背景 以下链接使我相信:

  • 苹果要求所有第三方浏览器使用UIWebView
  • 运行window.print()时,非Safari应用程序中使用的UIWebView不会执行任何操作
  • 当您运行window.print()时,iOS上的Safari会执行一些适当的操作
链接:

另外,我查看了Modernizer文档,看看它是否能够检测到对打印的支持,但没有发现任何东西

p.p.S.我看到Chrome for iOS确实支持打印,尽管是通过GCP。这里,只是寻找特征检测,而不是打印解决方案。()

编辑 为了澄清,window.print似乎不是任何标准的一部分:。如果window.print存在于某些浏览器中,但没有做任何有用的事情(例如,没有连接到任何特定于浏览器的适当打印功能实现),这就是我最终想要检测的

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


我越是想这项技术的精髓是如何发挥作用的,我就越不希望用简单的JavaScript方法来检测这项功能,这太糟糕了。

这个问题实际上是重复的。请参阅Smoker对这个问题的评论和所提到的答案。我同意,这可能是我们目前能做的最好的了

即使window.print不是任何标准的一部分,如果浏览器供应商能够实现并同意一些用于检测的API,那就太好了。也许他们都在内部为函数设计一个合适的实现,所以不想扔掉一些临时的东西,这些东西在以后将是无用的。哦,好吧。

更新 试试这个:

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

重复:(因赏金而无法标记)答案(ab)使用
print()
的阻塞性质是您的最佳猜测。我也有同样的想法,想不出更好的了。不过,它实际上并没有检测到支持,它只是告诉您
window.print()
是否确实做了什么…@rubesmoker您介意添加一个对重复问题(以及您提到的答案)的引用,作为此问题的答案吗?如果你愿意的话,我会把赏金扔给你,接受你的回答,因为这差不多是我能想到的对重复答案的“正确”答案:)酷,我在另一个论坛上发现了这个。我应该删除我的答案吗?因为滥用反对票对我毫无帮助。我只是想帮你找到一个解决办法,但是既然你已经接受了你自己的答案,在我尝试帮助这里的任何人之前,我可能应该三思而后行。老实说,对你的答案投反对票的人都不是我。如果有人发布了一个问题,后来发现了答案(即使答案是“哦,有一个我以前没有注意到的重复项”),也可以将其作为答案发布,如果没有其他人提供更可接受的答案,也可以接受自己的答案。即使是被否决的答案也能提供关于这个问题的有用信息,所以我认为它增加了so的有用性,所以不要删除它。
return(typeof(window.print)==“function”)
在运行iOS 4.2.1的iPhone 3G上尝试以下代码会产生“worked”:
try{window.print();alert('worked');}catch(e){alert('exception'));}
。我认为在window.print不起任何作用的浏览器上,它是一个函数,但内部实现很可能是不可操作的。如果window.print不是函数或未定义,脚本就会中断。所以它必须在那里;似乎没有什么好办法来判断它是否有用。