2017-04-13 1 views
8

afterPrint가 발생할 때 doSomethingFunc을 실행해야합니다. 현재 Safari 버전 (OSX의 Safari 10.1 및 iOS 10.3의 Safari 브라우저)을 제외한 모든 브라우저에서 내 코드가 올바르게 작동합니다. 이벤트 리스너 (적어도 인쇄용)는이 두 브라우저에서 호출되지 않는 것 같습니다.Safari window.matchMedia handler가 호출되지 않았습니다.

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

window.print(); 

위의 코드는 아이폰 OS 10.2에서 OSX 사파리 9.1.2와 사파리와 함께 완벽하게 작동합니다. 하지만 현재 버전은 아닙니다.

누군가 비슷한 것을 보았습니까? 현재 Safari 버전의 코드를 개선해야합니까?

Safari 10.1 changelog 액세스 가능성 장에 해당 메모가 있으므로 내 생각에 이것은 Safari 버그입니다.

+0

예 똑같은 경험이 있습니다. 인쇄가 1 페이지 이내 인 경우 핸들러가 작동한다고 (내 경우에는) 밝혀졌습니다. 인쇄물이 두 페이지 이상인 경우 완전히 무시됩니다. 아직 어떤 버그 리포트도 발견하지 못했습니다. – Rolchau

+0

예,이 기능이 자주 사용되지 않는 것 같습니다. bugreport.apple.com에서 버그 보고서를 작성하면 매우 기쁩니다. 나는 똑같이했다. 안타깝게도 사과는 버그로 인해 매우 투명합니다. 따라서 사과가 이미 눈치 챘는지 여부는 알 수 없습니다. – m4lt3

답변

-1

당신이 전화를하고 싶지 않았다

 setImmediate(doSomethingFunc); 

mql.matches 

이 사실인가요? 왜 '!' 그때?

+0

만약 당신이'! mql.matches'라고한다면, afterPrint-Event 동안 당신은 물건을하고 있고,'mql.matches'라고 말하면 beforePrint-Event 동안 물건을하고있는 것입니다. – m4lt3

+0

그냥 묻습니다. 원래 질문에 afterPrint-Event를 원한다고 명시하지 않았습니다. 아래 표를 가져 주셔서 감사 드리며 SO가 어떻게 작동하는지 자세히 알아 보겠습니다. – oopoopoop

관련 문제