You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Mozilla Firefox打印预览异常:模态框显示在待打印div下方如何解决

现有代码

<div class="maindiv"></div>
<div class="printablediv"></div>
function printData()
{
    $('#ProductIdModal').modal('hide');
    $(".maindiv").css('display','none');
    $(".Printablediv").css('display','block');
    $('.modal-backdrop').remove();
    window.print();
}

window.addEventListener("afterprint", myFunction);
function myFunction() {
    $(".maindiv").css('display','block');
    $(".Printablediv").css('display','none');
}

问题原因

该兼容问题由Chrome和Firefox的DOM更新执行时机差异导致:调用modal('hide')后Bootstrap模态框有默认的消失过渡动画,Chrome会等DOM更新完成后再执行后续打印逻辑,Firefox会直接执行后续代码,还没等模态框完全隐藏就触发了打印,所以预览会残留模态框。

解决方案

更推荐使用方案2,不需要修改现有业务逻辑,兼容性覆盖更广,也不会受JS执行顺序、动画时长的影响。

  • 方案1:监听模态框完全隐藏的事件,把打印逻辑放到回调中执行,保证模态框完全消失后再打印
function printData() {
    // 先监听模态框完全隐藏的事件,仅触发一次
    $('#ProductIdModal').one('hidden.bs.modal', function () {
        $(".maindiv").css('display','none');
        $(".Printablediv").css('display','block');
        $('.modal-backdrop').remove();
        window.print();
    })
    // 再触发模态框隐藏
    $('#ProductIdModal').modal('hide');
}
  • 方案2:新增打印专用CSS媒体查询,从样式层面直接禁止打印时显示模态框、遮罩层和非打印区域,完全规避JS执行时机问题
@media print {
    #ProductIdModal, .modal-backdrop, .maindiv {
        display: none !important;
    }
    .printablediv {
        display: block !important;
    }
}

添加上述CSS后无需修改原有JS代码即可同时兼容Chrome和Firefox。


内容的提问来源于stack exchange,提问作者Neetal Kini

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.08 11:54:03