【问题标题】:After cancel or save print dialog the current window was not close取消或保存打印对话框后,当前窗口未关闭
【发布时间】:2018-04-10 06:12:19
【问题描述】:

当我打印数据时,它会打开包含 HTML 页面的所有相应数据的新窗口,并在短时间内打开打印对话框,但是当我取消该对话框或关闭该对话框时,当前窗口不会关闭。

请建议关闭打印对话框后如何关闭对话框的后窗。

这是我打印数据的代码:

$.ajax({
    url: "project/printProjectData?" + this.searchdata,
    cache: false,
    dataType: 'html',
    contentType: 'application\'html',
    success: function(html){
        var w = window.open('');
        w.document.open();
        w.document.write('<html><head>');
        w.document.write('</head><body onload="window.print()">');
        w.document.write(html);
        w.document.write('</body></html>');
        w.document.close();
        CheckWindowState();
    }
});

function CheckWindowState() {
    if(document.readyState === "complete") {
        window.close();
    } else {
        setTimeout("CheckWindowState()", 2000)
    }
}

但仍然没有关闭新打开的窗口。

【问题讨论】:

    标签: javascript jquery ajax laravel-5.4


    【解决方案1】:

    // 只需将 w 对象传递给您的函数,以便它可以使用该对象关闭该窗口

    $.ajax({
        url: "project/printProjectData?" + this.searchdata,
        cache: false,
        dataType: 'html',
        contentType: 'application\'html',
        success: function(html){
            var w = window.open('');
            w.document.open();
            w.document.write('<html><head>');
            w.document.write('</head><body>');
            w.document.write(html);
            w.document.write('</body></html>');
            w.print();
            CheckWindowState(w);
        }
    });
    
    function CheckWindowState(window) {
        if(document.readyState === "complete") {
            window.close();
        } else {
            setTimeout("CheckWindowState()", 2000)
        }
    }
    

    【讨论】:

    • 立即关闭新窗口,甚至不打开对话框
    • 请检查一下,我编辑的代码现在可以工作了
    • 按预期但未在打印对话框中加载数据
    【解决方案2】:

    如果你想等待 n 秒然后关闭,你可以使用 setTimeout

    var delayInMilliseconds = 1000; //1 second
    
    setTimeout(function() {
      //your code to be executed after 1 second
    }, delayInMilliseconds);
    

    【讨论】:

      【解决方案3】:

      我找到了在打印或取消后关闭加载窗口的方法。

      因为我在 onload 事件后打印数据,所以我们必须在相同的 onload 事件上关闭窗口。

      printProjectData: function () {
          $.ajax({
              url: "project/printProjectData?" + this.searchdata,
              cache: false,
              dataType: 'html',
              contentType: 'application\'html',
              success: function(html){
                  var w = window.open();
                  w.document.write('<html><head>');
                  w.document.write('</head><body onload="window.print(); window.close();">');
                  w.document.write(html);
                  w.document.write('</body></html>');
                  w.document.close();
              }
          });
      },

      谢谢大家。:)

      【讨论】:

        猜你喜欢
        • 2011-09-21
        • 1970-01-01
        • 1970-01-01
        • 2015-05-24
        • 1970-01-01
        • 2010-10-15
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多