在window.load上打印到客户端

时间:2017-04-16 16:59:23

标签: javascript jquery printing

我正在尝试使用以下内容在页面加载时立即打印到客户端的打印机:

function openWin() {
    var printWindow = window.open();
    printWindow.document.write('<html><head><title>Test Page</title>');
    printWindow.document.write('</head><body>');
    printWindow.document.write("Name: <?php echo $firstname . " " . $lastname; ?><br />Spouse: <?php echo $sfirstname . " " . $slastname; ?><br />Address: <?php echo $_POST['address'] ?><br />City/State/Zip:  <?php echo $_POST['city'] . ", " . $_POST['state'] . " " . $_POST['zip'] ?><br />");  
    printWindow.document.write('</body></html>');
    printWindow.document.close();
    printWindow.focus();
    printWindow.print();
    printWindow.close(); 
}

要使用该功能,我正在使用

$(window).load(function(){
    openWin();
});

当文档打开时,没有任何内容打印 - 即openWin()函数不会触发。我已经尝试为它创建一个按钮,并在窗口加载时使用触发器单击按钮。我也试过setTimeout()延迟一段时间,以便页面可以继续加载等等。没有任何作用。

我在控制台收到此错误:

  

application2.php:240 Uncaught TypeError:无法读取null

的属性'document'

但是,当我在控制台上输入openWin()时,打印页面会正常打开。

任何帮助都将不胜感激。

2 个答案:

答案 0 :(得分:0)

当我用$(window).load替换$(window).ready时,它适用于我。 $(window).load在dom完全加载时有效。和$(document).ready在加载所有东西时都能正常工作(img等......)

答案 1 :(得分:0)

请记住,大多数浏览器会在用户操作(如点击)未触发弹出窗口时阻止弹出窗口。 一种方法是在load事件中调用'window.print',最后重定向到你需要的某个页面。

<!DOCTYPE html>
<html>
<head>
    <title></title>
    <script
  src="https://code.jquery.com/jquery-2.2.4.min.js"
  integrity="sha256-BbhdlvQf/xTY9gja0Dq3HiwQF8LaCRTXxZKRutelT44="
  crossorigin="anonymous"></script>
  <script type="text/javascript">

$(window).load(function(){
        window.document.write('<html><head><title>Test Page</title>');
        window.document.write('</head><body>');
        window.document.write("Name: Some valid html<br />");  
        window.document.write('</body></html>');
        window.document.close();
        window.print();
        window.location.replace("http://stackoverflow.com");
});
  </script>
</head>
<body>

</body>
</html>