首页 > 解决方案 > 打印快捷方式 (Ctrl + P) 用于在其中打印 Iframe 后窗口失去焦点

问题描述

我正在一个只包含一个 iframe 的屏幕上工作,并且在该 iframe 中有一个我需要打印的表格。我使用以下代码来做到这一点

jQuery(window).on("keyup keydown", function(e){
      if(e.ctrlKey && e.keyCode == 80){
          window.frames['tableToPrint'].focus();
          window.frames['tableToPrint'].print();
      }
   });

此代码仅在第一次使用。我的意思是,我输入我的 url 以打开网页,并且其中的 iframe 会按应有的方式打开。我按 Ctrl + P 打开浏览器的打印对话框以获取 PDF 副本,如果我通过它,我会得到我想要的 PDF。在我第一次尝试之后,我得到一个空的 PDF。

从调试来看,一旦浏览器的打印窗口关闭,iframe 的焦点就会被带走,并且我之后绑定的事件不起作用。

我试过了

var iframe = $("#tableToPrint")[0];
iframe.contentWindow.focus();

我试过了

window.onafterprint = function(e) {
   $('#tableToPrint').focus();
};

我可以在网上找到其他东西,但它们不起作用。它的行为就好像打印语句之后的事件不起作用,并且看起来它们丢失了并且浏览器对它来说是未知的。

非常感谢帮助

标签: javascriptjqueryhtmliframebrowser

解决方案


我已经对此进行了一些试验,据我所见,似乎不可能在非窗口元素上调用 .print() ,这意味着您的代码每次执行时都应该抛出以下错误:

未捕获的类型错误:window.frames.tableToPrint.print 不是函数

从我所见,打印时焦点也不重要......

所以我的问题是:您是否尝试过在没有运行任何 JQuery / JS 代码的情况下进行打印?它本身是否真的已经提供了你想要的东西?

另请参阅https://developer.mozilla.org/en-US/docs/Web/API/Window/frames以获取有关 window.frames 属性的更多信息。

(我的下一个回复将在大约 16 小时内)


推荐阅读