2016-01-15 7 views
2

У меня есть кнопка печати, которая запускает функции печати на любой веб-странице. Кнопка скрывается, как только пользователь нажимает на нее, и показывает, выполняется ли печать пользователем или закрывается в окне печати. Он отлично работает в Chrome, но не работает в firefox и IE.window.matchMedia ('print') не работает в Firefox и IE

<input type="button" onclick="launchPrint()" value= "Print me" /> 


function launchPrint(){ 
$(".print-box").hide(); 
window.print(); 
} 

(function() { 
    if (window.matchMedia) { 
     var mediaQueryList = window.matchMedia('print'); 
     mediaQueryList.addListener(function(mql) { 
      if (!mql.matches) { 
       $(".print-box").show(); 
      } 
     }); 
    } 
}()); 

Любые предложения, что мне может не хватать?

ответ

0

К сожалению, я нахожусь на той же проблеме, что и вы и я провели некоторое исследование. На данный момент кажется, что ошибка существует в версиях повторений FF и IE по-прежнему, и она не была исправлена.

Вы можете проверить эту ошибку для Firefox: https://bugzilla.mozilla.org/show_bug.cgi?id=774398

Я нашел другой человек, имеющий такой же вопрос, как и мы, и это не имеет действительно удовлетворяющий ответ: https://social.technet.microsoft.com/Forums/office/en-US/bc3ca05e-b4ef-425b-8bbd-d3f700a8c85e/windowmatchmedia-not-firing-for-print-in-ie?forum=ieitprocurrentver

Если я когда-либо прийти через любого решение, я отредактирую это.

я в основном, используют один и тот же код, как вы, как Exemple для highchart, чтобы изменить размер перед печатью:

function printUpdate() { 
    jQuery.each(Highcharts.charts, function(index, value){ 
     value.reflow(); 
    }); 
}; 
var mediaQueryList = window.matchMedia('print'); 
if(navigator.appVersion.indexOf("MSIE 8.")!==-1)//For IE8 
{ 
    document.attachEvent(function (mql){printUpdate();}, mediaQueryList); 
} 
else 
{ 
    if (window.matchMedia) { 
     mediaQueryList.addListener(function (mql) { 
      if (mql.matches) 
      { 
       printUpdate(); 
      } 
     }); 
    } 
} 

window.onbeforeprint = printUpdate; 

Эта работа штраф в хроме. Но FF и IE11 не будут запускать событие.

0

Возможно, вы захотите посмотреть на событие onafterprint. По крайней мере, это вызвано Firefox и IE, поэтому с потенциальным защитником (чтобы убедиться, что событие не срабатывало несколько раз) для вашего случая использования вы можете прослушивать как matchMedia("print"), так и событие onafterprint.