2017-04-13 18 views
8

Tôi cần thực hiện doSomethingFunc, khi xảy ra afterPrint. Mã của tôi hoạt động tốt trên tất cả các trình duyệt, ngoại trừ các phiên bản Safari hiện tại (Safari 10.1 trên OSX và Trình duyệt Safari từ iOS 10.3). Dường như các trình nghe sự kiện (ít nhất là để in) không được gọi cho hai trình duyệt này.Cửa sổ Safari.match Trình xử lý đa phương tiện không được gọi là

const mediaQueryPrint = window.matchMedia('print'); 
mediaQueryPrint.addListener((mql) => { 
    if (!mql.matches) { 
     setImmediate(doSomethingFunc); 
    } 
}); 

window.print(); 

Mã trên hoạt động hoàn hảo với OSX Safari 9.1.2 và Safari từ iOS 10.2. Nhưng không phải với các phiên bản hiện tại.

Có ai đó nhận thấy điều gì đó tương tự không? Hoặc tôi có phải cải thiện mã của mình cho các phiên bản Safari hiện tại không?

Tôi đoán là, đây là lỗi Safari, vì có ghi chú tương ứng trong Khả năng truy cập chương Safari 10.1 changelog.

+0

Có Tôi đã trải nghiệm điều tương tự - Hóa ra (trong trường hợp của tôi) rằng nó kích hoạt trình xử lý tốt nếu bản in nằm trong 1 trang. Nếu bản in nhiều hơn một trang, nó sẽ bị bỏ qua hoàn toàn. Tôi chưa tìm thấy bất kỳ báo cáo lỗi nào về nó. – Rolchau

+0

vâng, tôi đoán tính năng này không được sử dụng thường xuyên. Tôi sẽ rất vui, nếu bạn đã viết một báo cáo lỗi trên bugreport.apple.com. Tôi làm giống vậy. Quả táo đáng buồn là rất không minh bạch với các lỗi của nó, vì vậy chúng tôi không biết nếu táo nhận thấy nó đã. – m4lt3

Trả lời

-1

Bạn không muốn gọi

 setImmediate(doSomethingFunc); 

khi

mql.matches 

là True? Tại sao '!' sau đó?

+0

nếu bạn nói '! Mql.matches' bạn đang làm công cụ trong afterPrint-Event và nếu bạn nói' mql.matches' bạn đang làm công cụ trong beforePrint-Event. – m4lt3

+0

chỉ yêu cầu. câu hỏi ban đầu của bạn không nói rằng bạn muốn sự kiện afterPrint-Event. Cảm ơn bạn đã bỏ phiếu và bây giờ tôi đã tìm hiểu thêm về cách hoạt động của SO. – oopoopoop

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