【问题标题】:window.open does not work when print button is clicked for the second time in Chrome在 Chrome 中第二次单击打印按钮时 window.open 不起作用
【发布时间】:2019-10-01 18:54:00
【问题描述】:

我正在尝试打印适用于 IE 和 Google Chrome 的特定 div。这是我写的代码。

function PrintElem(elem) {
        Popup($(elem).html());
    }
function Popup(data) {

        var mywindow = window.open('', 'Product Purchase Summary Page ','height=400,width=600');
        mywindow.document.write('<html><head><title>my div</title>');


        mywindow.document.write('</head><body onload="javascript:window.print();">');
        mywindow.document.write(data);
        mywindow.document.write('</body></html>');
        mywindow.print();


        if (navigator.userAgent.match(/MSIE/) !== null) {
            mywindow.location.reload();
        }          
        return true;
    }

代码在 IE 中运行良好。在 chrome 中,第一次单击打印按钮时,它会打开一个打印窗口。打印窗口关闭后,如果我第二次单击打印按钮,window.open 不会打开打印窗口。它仅适用于第一次。打印按钮从第二次开始没有任何作用。 但是当我在打印窗口中单击取消按钮(而不是关闭)时,第二次单击按钮就可以了。 任何人都可以帮忙吗?

【问题讨论】:

  • 你从哪里打电话给PrintElem?您可能希望包含您的 html...
  • @webeno
  • 它在 Chrome v 33.0.1750.117 上运行良好

标签: javascript jquery


【解决方案1】:

确实,我在使用 Chrome 34 时遇到了完全相同的问题。我今天早上更新到 Chrome 36,问题已得到解决。

无论如何,您可能想试试这个,它通过将焦点-弹簧-关闭功能放在弹出窗口中为我解决了问题。

<HTML>
  <HEAD><TITLE>PRINT TEST</TITLE></HEAD>
  <BODY>
    <button label="print" onclick="print();">print</button>
  </BODY>

  <script>
  function print() {
    var datawindow = window.open("", "data", "height=400,width=600");
    datawindow.document.write("<html><head><title>data</title>");
    datawindow.document.write("</head><body onload='window.focus();window.print();' onbeforeunload='window.close();' ><pre><code>");
    datawindow.document.write("SOMETHING TO PRINT GOES HERE");
    datawindow.document.write("</code></pre></body></html>");
    datawindow.document.close();
    datawindow.close();
    this.__handlePrintSuccess();
  }
  </script>
</HTML>

注意onload='window.focus();window.print();'onbeforeunload='window.close();'

【讨论】:

    【解决方案2】:
    $(document).on("click", "#printBtn", function()
    {
    
        // Code [ Tap.. Tap.. Tap..]
    
    });
    

    【讨论】:

    • 尝试在您的解释中更具描述性。除了添加代码作为响应,尝试添加一个简短的解释为什么会派上用场。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-13
    • 1970-01-01
    • 1970-01-01
    • 2015-03-21
    • 2018-05-05
    • 1970-01-01
    相关资源
    最近更新 更多