Iframe禁用打印功能

       在项目开发过程中,遇到这样的问题,使用iframe加载pdf,然后,用户选择是否打印,用户选择打印的入口有两个,一个是浏览器的Control + P,还有一个是pdf页面右上角的打印按钮,但是,两个入口的结果完全不一样,其中Control + P打印内容是不正确的,因此,想着禁用Contol + P功能,但就是这么一个简单的功能,花费了一个上午的时间。所以在此记录一下,其他同学遇到此类问题时可参考。

       一般情况下我们禁用Control + P功能,如下代码即可解决:

function forbidBrowserPrint(e) {
    e = window.event || e;
    var keycode = e.keyCode || e.which;
    console.log("keycode is : " + keycode);
    if (e.ctrlKey && keycode === 80) {
        e.preventDefault();
        window.event.returnValue = false;
    }
}

因为我的项目中用到了Iframe加载pdf,上面的代码在pdf页面就失效了,究其原因,是因为iframe在其内部也生成了一套自己的Document

也就是说,一个页面出现了两个Document,因此我们需要对两个Document都进行Control + P功能禁用

$(function () {
    document.activeElement.addEventListener('keydown', forbidBrowserPrint);
});

function forbidBrowserPrintForIframe() {
    $("#pdfReport")[0].contentWindow.addEventListener('keydown', forbidBrowserPrint);
}

function forbidBrowserPrint(e) {
    e = window.event || e;
    var keycode = e.keyCode || e.which;
    console.log("keycode is : " + keycode);
    if (e.ctrlKey && keycode === 80) {
        e.preventDefault();
        window.event.returnValue = false;
    }
}
<iframe id="pdfReport" style="width: 100%; height: 100%;" onload="forbidBrowserPrintForIframe()"></iframe>

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值