2015-06-23 11 views
6

Tôi hiện đang sử dụng phiên bản Chrome cập nhật nhất (43.0.2357.130) và đang gặp sự khác biệt về chức năng in khi gọi in từ window.print() và sử dụng ⌘P .Phát hiện sự kiện in của trình duyệt xảy ra theo hai cách khác nhau trong Chrome

Khi in bằng cách sử dụng window.print(), kết quả sẽ xuất ra bàn điều khiển chính xác. Nó xuất ra Before Print khi hộp thoại in được mở và After Print khi hộp thoại đóng.

Tuy nhiên, khi sử dụng menu Chrome hoặc ⌘P để in, bản ghi sẽ ghi lại cả Before PrintAfter Print vào bảng điều khiển khi hộp thoại in mở ra.

Đây là mã tôi đang sử dụng, hoạt động tốt trong các trình duyệt khác.

function beforePrint() { 
    console.log('Before Print'); 
} 

function afterPrint() { 
    console.log('After Print'); 
} 

if (window.matchMedia) { 
    var mediaQueryList = window.matchMedia('print'); 
    mediaQueryList.addListener(function (mql) { 
     (mql.matches) ? beforePrint() : afterPrint(); 
    }); 
} 
else { 
    // basically a fallback for < IE11 
    window.addEventListener('beforeprint', beforePrint, false); 
    window.addEventListener('afterprint', afterPrint, false); 
} 

Một lần nữa cho rõ ràng, nếu như đây là giao diện điều khiển:

Đây là sản phẩm tôi mong đợi:

> window.print() 
    Before Print 
    // Print Dialog is now open, I press cancel to close dialog 
    After Print 

Đây là sản phẩm tôi nhận được khi tôi sử dụng ⌘P hoặc menu để bắt đầu in:

Before Print 
    After Print 
    // Print Dialog is now open, but it is occurring in the wrong place 

Đây có phải là lỗi trong Chrome hoặc có cách nào khác để nắm bắt sự kiện chính xác không?

Chỉ cần để tham khảo, đây là Can I Use support table cho matchMedia

Trả lời

Các vấn đề liên quan