Tự động đóng cửa sổ sau khi hộp thoại in đóng lại


86

Tôi có một tab đang mở khi người dùng nhấp vào một nút. Trên onloadI have it hiển thị hộp thoại in, nhưng người dùng đã hỏi tôi liệu có khả năng sau khi nó gửi đến máy in để in, nếu tab có thể tự đóng lại. Tôi không chắc liệu điều này có thể được thực hiện hay không. Tôi đã thử sử dụng setTimeout();, nhưng đó không phải là khoảng thời gian xác định vì người dùng có thể bị phân tâm và phải mở lại tab. Có cách nào để thực hiện điều này?



Câu trả lời:


113

nếu bạn cố gắng đóng cửa sổ ngay sau lệnh gọi print (), nó có thể đóng cửa sổ ngay lập tức và print () sẽ không hoạt động. Đây là điều bạn không nên làm :

window.open();
...
window.print();
window.close();

Giải pháp này sẽ hoạt động trong Firefox, bởi vì trong lệnh gọi print (), nó sẽ đợi cho đến khi in xong và sau đó nó tiếp tục xử lý javascript và đóng () cửa sổ. IE sẽ không thực hiện được điều này vì nó gọi hàm close () mà không đợi lệnh print () được thực hiện. Cửa sổ bật lên sẽ bị đóng trước khi in xong.

Một cách để giải quyết nó là sử dụng sự kiện "onafterprint" nhưng tôi không khuyên bạn nên sử dụng nó vì những sự kiện này chỉ hoạt động trong IE.

Cách tốt nhất là đóng cửa sổ bật lên sau khi hộp thoại in đóng (in xong hoặc hủy). Tại thời điểm này, cửa sổ bật lên sẽ được tiêu điểm và bạn có thể sử dụng sự kiện "onfocus" để đóng cửa sổ bật lên.

Để thực hiện việc này, chỉ cần chèn mã nhúng javascript này vào cửa sổ bật lên của bạn:

<script type="text/javascript">
window.print();
window.onfocus=function(){ window.close();}
</script>

Hy vọng điều này hepls ;-)

Cập nhật:

Đối với các trình duyệt chrome mới, nó có thể vẫn đóng quá sớm, hãy xem tại đây . Tôi đã triển khai thay đổi này và nó hoạt động cho tất cả các trình duyệt hiện tại: 29/2/16

        setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Đối với những gì nó đáng giá, điều này dường như không thành công trong IE8. Cửa sổ đóng ngay trước khi hộp thoại in hiển thị.
Heath

15
Điều này dường như không hoạt động đối với chrome tại thời điểm này, vì chrome xử lý việc in nội bộ, cửa sổ sẽ không bị mất tiêu điểm khi hộp thoại in tải và do đó sẽ không lấy lại tiêu điểm khi in xong. Bất kỳ cách nào để làm cho điều này hoạt động cho Chrome?
jlbriggs

6
Kể từ tháng 2 năm 2016, câu trả lời này và KHÔNG của câu trả lời dựa trên tiêu điểm khác () còn hoạt động trong Chrome nữa. Giải pháp hoạt động duy nhất là @noamtcohen (đáng buồn là số phiếu bầu rất thấp).
Jpsy

2
Tôi nghĩ rằng phiên bản Chrome mới nhất sẽ không hiển thị hộp thoại in cho đến khi hình ảnh trên trang được tải, nhưng nó đang thực hiện đóng trước đó, vì vậy trang sẽ đóng trước khi tải (hộp thoại in không bao giờ hiển thị). Để khắc phụcwindow.onload = function () { window.print(); setTimeout(window.close, 500); };
Brian Leishman,

3
Giải pháp trên không hoạt động nữa, vui lòng thêm trình xử lý sự kiện onafterprint để đóng cửa sổ window.onafterprint = function () {window.close ()};
Rahat Hameed,

91

Đây là những gì tôi nghĩ ra, tôi không biết tại sao có một sự chậm trễ nhỏ trước khi đóng cửa.

 window.print();
 setTimeout(window.close, 0);

1
Điều thú vị là câu trả lời được đánh giá thấp này hiện là câu trả lời chính xác. Kể từ tháng 2 năm 2016, không có câu trả lời nào dựa trên tiêu điểm () hoạt động trong Chrome nữa. Giải pháp này hoạt động trong FF, Chrome và Safari trên Windows và OS X, IE9 +, Android Chrome và IOS Safari. Chúng tôi chỉ gặp phải hộp thoại xác nhận trong các IE cũ. Tất cả khác đóng liền mạch.
Jpsy

6
Kể từ ngày 17 tháng 3, điều này không hoạt động với tôi chính xác như trong Chrome (56) nhưng thêm một chút thời gian vào thời gian chờ đã hoạt động. window.print (); setTimeout (window.close, 500);
jAC

Như jAC đã đề cập, điều này cần thêm thời gian để nó hoạt động. Đối với tôi, 10ms là không đủ, nhưng 100 là đủ. Có vẻ như vấn đề là mất bao lâu để hiển thị bản xem trước bản in. Với thiết lập của tôi là 10 mili giây, nó chỉ in một phiên bản được hiển thị một phần của trang. Với 100, tôi có toàn bộ.
Jacob Ewing

1
Để mở rộng điều đó, có vẻ như thời gian chờ bị tạm dừng sau khi cửa sổ in được hiển thị hoàn toàn (dù sao trong chrome trên macbook) và phần còn lại được tính sau khi cửa sổ đóng.
Jacob Ewing

1
Bạn không cần phải là 0, đó là mặc định
Brian Leishman

14

Chỉ:

window.print();
window.close();

Nó hoạt động.


2
Điều này không hoạt động đáng tin cậy đối với tôi trên chrome. Đôi khi nó hoạt động, nhưng đôi khi cửa sổ chỉ ngay lập tức đóng trước khi hộp thoại in xuất hiện. Tôi có thể ngăn điều đó xảy ra bằng cách tăng thời gian chờ lên 5000, nhưng đôi khi phải mất đến 5 giây để cửa sổ đóng lại sau khi in. Tôi không chắc chắn chính xác điều gì đang xảy ra ở đây, nhưng nó có vẻ không mạnh mẽ trên các trình duyệt khác nhau.
speedarius,

1
Như đã đề cập bên dưới, giải pháp trình duyệt chéo đầy đủ phức tạp hơn.
Eric

1
Đừng quên: Scripts may close only the windows that were opened by it.cảnh báo.
Cas Bloem

Giải pháp trên không hoạt động nữa, vui lòng thêm trình xử lý sự kiện onafterprint để đóng cửa sổ. window.onafterprint = function(){ window.close()};
Rahat Hameed,

12

Tôi chỉ muốn viết những gì tôi đã làm và những gì đã hiệu quả với tôi (vì không có gì khác mà tôi đã thử đã hiệu quả).

Tôi gặp sự cố rằng IE sẽ đóng cửa sổ trước khi hộp thoại in khởi động.

Sau rất nhiều thử nghiệm và kiểm tra lỗi, đây là những gì tôi phải làm việc:

var w = window.open();
w.document.write($('#data').html()); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();

Điều này dường như hoạt động trên tất cả các trình duyệt.


dường như hoạt động. nó không còn nữa, tôi sẽ đăng mã của tôi bên dưới.
Remco

10

Mã này hoạt động hoàn hảo đối với tôi:

<body onload="window.print()" onfocus="window.close()">

Khi trang mở ra, hộp thoại in sẽ tự động mở và sau khi in hoặc hủy, nó sẽ đóng cửa sổ.

Hy vọng nó giúp,


liều này không hoạt động nếu bạn đã mở pdf để in chứ không phải html hoặc jsp thì tôi có thể đặt trên cơ thể?
shareef

9

Chắc chắn điều này có thể dễ dàng giải quyết bằng cách làm như sau:

      <script type="text/javascript">
         window.print();
         window.onafterprint = window.close();
      </script>

Hoặc nếu bạn muốn làm điều gì đó chẳng hạn, hãy truy cập trang trước.

    <script type="text/javascript">
        window.print();
        window.onafterprint = back;

        function back() {
            window.history.back();
        }
    </script>

window.close ();
Mustafa

Lưu ý: window.onafterprint = window.close();nên window.onafterprint = window.close;Việc chuyển nhượng cựu các kết quả của window.close()để onafterprint. Điều này sẽ làm window.close()cho chạy ngay lập tức khi trình xử lý được thiết lập và không có gì để chạy khi onafterprintsự kiện được nâng lên. Cái sau được chỉ định window.closelàm trình xử lý sự kiện, đó là những gì chúng tôi muốn.
Kei

Ngoài ra, trong một số trình duyệt, việc thực thi mã sẽ tạm dừng sau đó window.print();cho đến khi hộp thoại in bị loại bỏ. Khi điều này xảy ra, onafterprintsự kiện được nêu ra trước đó onafterprintcó thể được chỉ định. Vì vậy, tốt hơn là nên window.onafterprint = window.close;đến trước window.print();. Nếu không, phương pháp được sử dụng trong câu trả lời này hoạt động tốt hơn so với phương pháp dựa trên onfocus hoặc setTimeout được đề xuất bởi các câu trả lời khác.
Kei

8

Đây là giải pháp đa trình duyệt đã được thử nghiệm trên Chrome, Firefox, Opera vào năm 2016/05.

Hãy nhớ rằng Microsoft Edge có một lỗi không đóng cửa sổ nếu quá trình in bị hủy. Liên kết liên quan

var url = 'http://...';
var printWindow = window.open(url, '_blank');
printWindow.onload = function() {
    var isIE = /(MSIE|Trident\/|Edge\/)/i.test(navigator.userAgent);
    if (isIE) {

        printWindow.print();
        setTimeout(function () { printWindow.close(); }, 100);

    } else {

        setTimeout(function () {
            printWindow.print();
            var ival = setInterval(function() {
                printWindow.close();
                clearInterval(ival);
            }, 200);
        }, 500);
    }
}

7

Sử dụng Chrome, tôi đã cố gắng trong một thời gian để có được window.onfocus=function() { window.close(); }<body ... onfocus="window.close()"> hoạt động. Kết quả của tôi:

  1. Tôi đã đóng đối thoại in của mình, không có gì xảy ra.
  2. Tôi đã thay đổi cửa sổ / tab trong trình duyệt của mình, vẫn không có gì.
  3. đã thay đổi trở lại cửa sổ / tab đầu tiên của tôi và sau đó sự kiện window.onfocus được kích hoạt để đóng cửa sổ.

Tôi cũng đã thử <body onload="window.print(); window.close()" >dẫn đến kết quả là cửa sổ đóng trước khi tôi có thể nhấp vào bất kỳ thứ gì trong hộp thoại in.

Tôi không thể sử dụng một trong hai. Vì vậy, tôi đã sử dụng một chút Jquery để theo dõi trạng thái tài liệu và mã này phù hợp với tôi.

<script type="text/javascript">
    var document_focus = false; // var we use to monitor document focused status.
    // Now our event handlers.
    $(document).focus(function() { document_focus = true; });
    $(document).ready(function() { window.print(); });
    setInterval(function() { if (document_focus === true) { window.close(); }  }, 500);
</script>

Chỉ cần đảm bảo rằng bạn đã bao gồm jquery và sau đó sao chép / dán nó vào html bạn đang in. Nếu người dùng đã in, lưu dưới dạng PDF hoặc hủy lệnh in, cửa sổ / tab sẽ tự động hủy. Lưu ý: Tôi chỉ mới thử nghiệm điều này trong chrome.

Biên tập

Như Jypsy đã chỉ ra trong các nhận xét, trạng thái tiêu điểm tài liệu là không cần thiết. Bạn chỉ cần sử dụng câu trả lời từ noamtcohen, tôi đã thay đổi mã của mình thành đó và nó hoạt động.


Giải pháp này khiến cửa sổ ban đầu bị treo nếu người dùng đóng cửa sổ bật lên bằng chữ "X" ở góc chứ không chọn Hủy hoặc In. Vấn đề tương tự như giải pháp của Juan, mà @JFK đã chỉ ra ban đầu.
Clayton

Javascript trên có nghĩa là không được đặt trong html đang được in cho dù được mở trong cửa sổ bật lên hay, như tôi làm, trong một tab mới. Vì vậy, javascript này không có tác dụng trên cửa sổ gốc.
Nado11

5

cái này phù hợp với tôi:

<script>window.onload= function () { window.print();window.close();   }  </script>

5

Những điều sau đây đã làm việc cho tôi:

function print_link(link) {
    var mywindow = window.open(link, 'title', 'height=500,width=500');   
    mywindow.onload = function() { mywindow.print(); mywindow.close(); }
}

5

Chỉ cần bọc window.close bằng trình xử lý sự kiện onafterprint, nó đã hoạt động với tôi

printWindow.print();
printWindow.onafterprint = () => printWindow.close();

Yêu cầu Safari v12
Paul Brady

4

Điều này hoạt động tốt trong Chrome 59:

window.print();
window.onmousemove = function() {
  window.close();
}

4

Tôi đã thử nhiều thứ mà không hiệu quả. Điều duy nhất phù hợp với tôi là:

window.print();
window.onafterprint = function () {
    window.close();
}

đã thử nghiệm trên chrome.


Tôi ghét nó bao nhiêu điều này làm việc
Franz Justin Buenaventura

3

Giải pháp sau đang hoạt động cho các phiên bản IE9, IE8, Chrome và FF mới hơn kể từ 2014-03-10. Tình huống là thế này: bạn đang ở trong một cửa sổ (A), nơi bạn nhấp vào nút / liên kết để khởi chạy quá trình in, sau đó một cửa sổ mới (B) với nội dung cần in sẽ được mở ra, hộp thoại in được hiển thị ngay lập tức, và bạn có thể hủy hoặc in, sau đó cửa sổ mới (B) sẽ tự động đóng lại.

Đoạn mã sau đây cho phép điều này. Mã javascript này sẽ được đặt trong html cho cửa sổ A (không cho cửa sổ B):

/**
 * Opens a new window for the given URL, to print its contents. Then closes the window.
 */
function openPrintWindow(url, name, specs) {
  var printWindow = window.open(url, name, specs);
    var printAndClose = function() {
        if (printWindow.document.readyState == 'complete') {
            clearInterval(sched);
            printWindow.print();
            printWindow.close();
        }
    }
    var sched = setInterval(printAndClose, 200);
};

Nút / liên kết để khởi chạy quy trình chỉ cần gọi chức năng này, như trong:

openPrintWindow('http://www.google.com', 'windowTitle', 'width=820,height=600');

Nó hoạt động trong Chrome miễn là người dùng in hoặc hủy thao tác NHƯNG nếu người dùng đóng cửa sổ (B), cửa sổ (A) bị treo (tôi đã nói trong Chrome?). Kiểm tra (trong Chrome) jsfiddle.net/qy6QV/2/show và đóng cửa sổ. Sau đó thử tải lại thì ... bị treo.
JFK

2
<!doctype html>
<html>
<script>
 window.print();
 </script>
<?php   
date_default_timezone_set('Asia/Kolkata');
include 'db.php'; 
$tot=0; 
$id=$_GET['id'];
    $sqlinv="SELECT * FROM `sellform` WHERE `id`='$id' ";
    $resinv=mysqli_query($conn,$sqlinv);
    $rowinv=mysqli_fetch_array($resinv);
?>
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>Veg/NonVeg</td>  
            </tr>
            <tr>
                <th style='text-align:center;font-sie:4px'><b>HARYALI<b></th>  
            </tr>   
            <tr>
                <td style='text-align:center;font-sie:1px'>Ac/NonAC</td>  
            </tr>
            <tr>
                <td style='text-align:center;font-sie:1px'>B S Yedurappa Marg,Near Junne Belgaon Naka,P B Road,Belgaum - 590003</td>  
            </tr>
        </table>
        <br>    
        <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1'>-----------------------------------------------</td>  
            </tr>
        </table>

        <table  width="100%" cellspacing='6' cellpadding='0'>

            <tr>
                <th style='text-align:center;font-sie:1px'>ITEM</th>
                <th style='text-align:center;font-sie:1px'>QTY</th>
                <th style='text-align:center;font-sie:1px'>RATE</th>
                <th style='text-align:center;font-sie:1px'>PRICE</th>
                <th style='text-align:center;font-sie:1px' >TOTAL</th>
            </tr>

            <?php
            $sqlitems="SELECT * FROM `sellitems` WHERE `invoice`='$rowinv[0]'";
            $resitems=mysqli_query($conn,$sqlitems);
            while($rowitems=mysqli_fetch_array($resitems)){
            $sqlitems1="SELECT iname FROM `itemmaster` where icode='$rowitems[2]'";
            $resitems1=mysqli_query($conn,$sqlitems1);
            $rowitems1=mysqli_fetch_array($resitems1);
            echo "<tr>
                <td style='text-align:center;font-sie:3px'  >$rowitems1[0]</td>
                <td style='text-align:center;font-sie:3px' >$rowitems[5]</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[4],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[6],2)."</td>
                <td style='text-align:center;font-sie:3px' >".number_format($rowitems[7],2)."</td>
              </tr>";
                $tot=$tot+$rowitems[7];
            }

            echo "<tr>
                <th style='text-align:right;font-sie:1px' colspan='4'>GRAND TOTAL</th>
                <th style='text-align:center;font-sie:1px' >".number_format($tot,2)."</th>
                </tr>";
            ?>
        </table>
     <table width="100%">
           <tr>
                <td style='text-align:center;font-sie:1px'>-----------------------------------------------</td>  
            </tr>
        </table>
        <br>
        <table width="100%">
            <tr>
                <th style='text-align:center;font-sie:1px'>Thank you Visit Again</th>  
            </tr>
        </table>
<script>
window.close();
</script>
</html>

In và đóng cửa sổ tab mới bằng php và javascript chỉ với một cú nhấp chuột


1

Điều này hoạt động tốt nhất đối với tôi khi đưa HTML vào cửa sổ bật lên, chẳng hạn như <body onload="window.print()"... Ở trên hoạt động cho IE, Chrome và FF (trên Mac) nhưng không có FF trên Windows.

https://stackoverflow.com/a/11782214/1322092

var html = '<html><head><title></title>'+
               '<link rel="stylesheet" href="css/mycss.css" type="text/css" />'+
               '</head><body onload="window.focus(); window.print(); window.close()">'+
               data+
               '</body></html>';

1

Đây là những gì tôi làm ...

Cho phép cửa sổ tự in và đóng lại dựa trên tham số truy vấn.

Yêu cầu jQuery. Có thể được thực hiện trong _Layout hoặc trang chủ để làm việc với tất cả các trang.

Ý tưởng là chuyển một tham số trong URL yêu cầu trang in và đóng, nếu tham số được đặt thì sự kiện jQuery “sẵn sàng” sẽ in cửa sổ và sau đó khi trang được tải đầy đủ (sau khi in) thì “tải lên” được gọi là đóng cửa sổ. Tất cả các bước dường như bổ sung này là đợi cửa sổ in trước khi tự đóng.

Trong sự kiện thêm và tải nội dung html gọi printAndCloseOnLoad (). Trong ví dụ này, chúng tôi đang sử dụng cshtm, bạn cũng có thể sử dụng javascript để lấy param.

<body onload="sccPrintAndCloseOnLoad('@Request.QueryString["PrintAndClose"]');">

Trong javascript thêm chức năng.

function printAndCloseOnLoad(printAndClose) {
    if (printAndClose) {
        // close self without prompting
        window.open('', '_self', ''); window.close();
    }
}

Và sự kiện sẵn sàng của jQuery.

$(document).ready(function () {
    if (window.location.search.indexOf("PrintAndClose=") > 0)
        print();
});

Bây giờ khi mở bất kỳ URL nào, chỉ cần nối chuỗi truy vấn tham số “PrintAndClose = true” và nó sẽ in và đóng.


1

Đối với tôi, giải pháp cuối cùng của tôi là sự kết hợp của một số câu trả lời:

    var newWindow = window.open();
    newWindow.document.open();
    newWindow.document.write('<html><link rel="stylesheet" href="css/normalize-3.0.2.css" type="text/css" />'
            + '<link rel="stylesheet" href="css/default.css" type="text/css" />'
            + '<link rel="stylesheet" media="print" href="css/print.css" type="text/css" />');

    newWindow.document.write('<body onload="window.print();" onfocus="window.setTimeout(function() { window.close(); }, 100);">');
    newWindow.document.write(document.getElementById(<ID>).innerHTML);
    newWindow.document.write('</body></html>');
    newWindow.document.close();
    newWindow.focus();

1

Đây là những gì đã làm việc cho tôi (2018/02). Tôi cần một yêu cầu riêng vì bản in của tôi chưa hiển thị trên màn hình. Dựa trên một số câu trả lời xuất sắc ở trên, mà tôi cảm ơn tất cả các bạn, tôi nhận thấy:

  • w.onloadphải không được thiết lập trước w.document.write(data).
    Nó có vẻ lạ bởi vì bạn muốn đặt hook trước. Tôi đoán: hook đã được kích hoạt khi mở cửa sổ mà không có nội dung. Vì nó đã bắn, nó sẽ không bắn nữa. Tuy nhiên, khi vẫn còn quá trình xử lý với một mới document.write()thì hook sẽ được gọi khi quá trình xử lý kết thúc.
  • w.document.close()vẫn được yêu cầu. Nếu không thì không có gì xảy ra.

Tôi đã thử nghiệm điều này trong Chrome 64.0, IE11 (11.248), Edge 41.16299 (edgeHTML 16.16299), FF 58.0.1. Họ sẽ phàn nàn về cửa sổ bật lên, nhưng nó vẫn in.

function on_request_print() {
  $.get('/some/page.html')
    .done(function(data) {
      console.log('data ready ' + data.length);
      var w = window.open();
      w.document.write(data);
      w.onload = function() {
        console.log('on.load fired')
        w.focus();
        w.print();
        w.close();
      }
      console.log('written data')
      //this seems to be the thing doing the trick
      w.document.close();
      console.log('document closed')
    })
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js">
</script>
<a onclick="on_request_print();">Print rapportage</a>

1
const printHtml = async (html) => {
    const printable = window.open('', '_blank', 'fullscreen=no');
    printable.document.open();
    printable.document.write(`<html><body onload="window.print()">${html}</body></html>`);
    await printable.print();
    printable.close();
};

Đây là giải pháp ES2016 của tôi.


1
Xin chào Stuart và chào mừng đến với Stack Overflow! Bạn có thể giải thích tại sao mã này hoạt động để giúp OP và những người dùng khác nhiều hơn không? Cảm ơn!
heather

1

Điều này hoàn toàn phù hợp với tôi @holger, tuy nhiên, tôi đã sửa đổi nó và phù hợp với tôi hơn, cửa sổ hiện bật lên và đóng ngay lập tức, bạn nhấn nút in hoặc hủy.

function printcontent()
{ 
var disp_setting="toolbar=yes,location=no,directories=yes,menubar=yes,"; 
disp_setting+="scrollbars=yes,width=300, height=350, left=50, top=25"; 
var content_vlue = document.getElementById("content").innerHTML; 
var w = window.open("","", disp_setting);
w.document.write(content_vlue); //only part of the page to print, using jquery
w.document.close(); //this seems to be the thing doing the trick
w.focus();
w.print();
w.close();
}"

1

jquery:

$(document).ready(function(){ 
  window.print();
  setTimeout(function(){ 
             window.close();
  }, 3000);
});

0

IE có (has?) The onbeforeprintand onafterprintevent: bạn có thể đợi điều đó, nhưng nó sẽ chỉ hoạt động trên IE (có thể có hoặc có thể không).

Ngoài ra, bạn có thể thử và đợi tiêu điểm quay trở lại cửa sổ từ hộp thoại in và đóng nó. Amazon Web Services thực hiện điều này trong hộp thoại in hóa đơn của họ: bạn nhấn nút in, nút này sẽ mở ra chế độ xem thân thiện với bản in và ngay lập tức mở hộp thoại máy in. Nếu bạn nhấn in hoặc hủy hộp thoại in sẽ đóng và sau đó chế độ xem thân thiện với bản in ngay lập tức đóng lại.


0

Có rất nhiều khó khăn để những thứ như thế này hoạt động trên các trình duyệt.

Ban đầu tôi cũng muốn làm điều tương tự - mở một trang mới được tạo kiểu để in, in nó bằng JS, sau đó đóng nó lại. Đây là một cơn ác mộng.

Cuối cùng, tôi đã chọn chỉ cần nhấp qua đến trang có thể in và sau đó sử dụng JS bên dưới để bắt đầu in, sau đó tự chuyển hướng đến nơi tôi muốn đến khi hoàn tất (với một biến được đặt trong PHP trong trường hợp này).

Tôi đã thử nghiệm điều này trên Chrome và Firefox trên OSX và Windows và IE11-8, và nó hoạt động trên tất cả (mặc dù IE8 sẽ đóng băng một chút nếu bạn thực sự không cài đặt máy in).

Đi săn vui vẻ (in ấn).

<script type="text/javascript">

   window.print(); //this triggers the print

   setTimeout("closePrintView()", 3000); //delay required for IE to realise what's going on

   window.onafterprint = closePrintView(); //this is the thing that makes it work i

   function closePrintView() { //this function simply runs something you want it to do

      document.location.href = "'.$referralurl.'"; //in this instance, I'm doing a re-direct

   }

</script>

0

chỉ cần sử dụng tập lệnh java này

 function PrintDiv() {
    var divContents = document.getElementById("ReportDiv").innerHTML;
    var printWindow = window.open('', '', 'height=200,width=400');
    printWindow.document.write('</head><body >');
    printWindow.document.write(divContents);
    printWindow.document.write('</body></html>');
    printWindow.document.close();
    printWindow.print();
    printWindow.close();
}

nó sẽ đóng cửa sổ sau khi gửi hoặc hủy nhấp vào nút


0

Trên IE11, sự kiện onfocus được gọi hai lần, do đó người dùng được nhắc đóng cửa sổ hai lần. Điều này có thể được ngăn chặn bằng một thay đổi nhỏ:

<script type="text/javascript">
  var isClosed = false;
  window.print();
  window.onfocus = function() {
    if(isClosed) { // Work around IE11 calling window.close twice
      return;
    }
    window.close();
    isClosed = true;
  }
</script>

0

Điều này phù hợp với tôi trong FF 36, Chrome 41 và IE 11. Ngay cả khi bạn hủy in và ngay cả khi bạn đóng hộp thoại in bằng chữ "X" trên cùng bên phải.

var newWindow=window.open(); 
newWindow.document.open();
newWindow.document.write('<HTML><BODY>Hi!</BODY></HTML>'); //add your content
newWindow.document.close();
newWindow.print();      

newWindow.onload = function(e){ newWindow.close(); }; //works in IE & FF but not chrome 

//adding script to new document below makes it work in chrome 
//but alone it sometimes failed in FF
//using both methods together works in all 3 browsers
var script   = newWindow.document.createElement("script");
script.type  = "text/javascript";
script.text  = "window.close();";
newWindow.document.body.appendChild(script);

0
setTimeout(function () { window.print(); }, 500);
        window.onfocus = function () { setTimeout(function () { window.close(); }, 500); }

Nó hoạt động hoàn hảo cho tôi. Hy vọng nó giúp


0

Điều này phù hợp với tôi trên Chrome (chưa thử trên những người khác)

$(function(){
    window.print();
    $("body").hover(function(){
        window.close();
    });
});

0

Tôi đã thử cái này và nó hoạt động

var popupWin = window.open('', 'PrintWindow', 
'width=650,height=650,location=no,left=200px');
popupWin.document.write(data[0].xmldata);
popupWin.print();
popupWin.close();
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.