window.matchMedia(' print')在Firefox和IE中失败

时间:2016-01-15 21:04:12

标签: javascript html printing matchmedia

我有一个打印按钮,可以在任何网页上启动打印功能。一旦用户点击该按钮,该按钮就会隐藏,并显示用户是否已完成打印或在打印窗口中按下关闭。它在Chrome中运行良好,但在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();
            }
        });
    }
}());

我可能缺少什么建议?

2 个答案:

答案 0 :(得分:0)

不幸的是,我遇到了和你一样的问题,而且我做了一些研究。目前看来这个bug存在于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

如果我遇到任何解决方案,我会编辑它。

我主要使用与您相同的代码作为高亮图的例子,以便在打印前调整大小:

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并没有赢得这次活动。

答案 1 :(得分:0)

您可能希望查看onafterprint事件。至少这是由Firefox和IE触发的,所以对于你的用例,有一个潜在的守卫(为了确保事件不会多次触发)你可以同时收听matchMedia("print")onafterprint事件