2012-02-13 79 views
8

我认为这个问题的答案几乎肯定是“不”,因为我已经做了一些测试和周围进行搜索,但没有任何技巧,从里面检测是否window.print()甚至威力工作页面(即从JavaScript)?我知道,即使在台式机/笔记本电脑上,也无法知道系统中是否配置了打印机,但至少浏览器会打印一个对话框。确定浏览器是否支持打印

我的Android手机有一个window.print()功能,但它(毫不奇怪)不会做任何事情。

再次声明,我问大多所以有在SO :-)

回答

5

的主题一个很好的问题不幸的是,它看起来像一个没有。 window.print()函数不是EMCAScript规范的一部分。这意味着它不需要成为JavaScript语言的一部分,也没有适合它的实现的文档。这是未定义的行为,因此对它进行测试看起来非常困难。

来源:

编辑:

可爱的小剧本我写来测试我的浏览器,只检查打印功能存在,然后问打印:

if(window.print) { 
    if(confirm('I can print. Would you like to?')) 
     window.print() 
} 
+0

是的,这就是我几乎决定。好吧,也许现在这将作为一个很好的参考点:-) – Pointy 2012-02-13 22:52:50

+2

我也写了这个测试我的浏览器:http://jsfiddle.net/zdY4d/4/ – Jivings 2012-02-13 22:53:29

+0

@Jivings添加小提琴到您的答案... – powtac 2012-02-13 23:03:47

5

print()的方法是同步的。这可以做后果,以便决定是否显示打印对话框

var start = +new Date(); 
window.print(); 
var delta = + new Date() - start; 
console.log(delta); 
if (delta > 100) { console.log('It worked'); } 
+0

尽管用户必须尝试打印以测试他是否可以打印:)。无论如何,如果打印失败(不是delta> 100),您可以使用此脚本并显示一条消息。 – Fernando 2014-02-05 11:12:51

+0

我假设如果一个浏览器定义了window.print(以避免脚本打破,试图调用它),但实际上并没有做任何事情,它将花费不到100ms来处理下一行代码。我喜欢。我只是希望有一种方法来测试没有实际调用它!不过,这是我见过的最好的解决方案。 – jinglesthula 2014-02-13 20:50:46

+1

顺便说一句,万一任何人想知道加号,http://stackoverflow.com/questions/221539/what-does-the-plus-sign-do-in-return-new-date – jinglesthula 2014-02-13 22:04:42