在项目开发过程中,遇到这样的问题,使用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>