javascript - Safari:打印 Iframe 时防止出现两个打印对话框

标签 javascript html safari

我的网站有一个“打印此页”按钮。

我将静态打印模板 HTML 文件加载到隐藏的 iframe 中,使用 jQuery 将 HTML 复制到该页面,然后从 Iframe 页面调用 window.print()。一切都很好,但在 Safari 上除外,它也想打印父框架,所以我打开了两个打印对话框。

我试过从 iframe 中调用 window.print,并从父级调用它,以 iframe 为目标 (document.printFrame.window.print()) 但无论如何我都会得到两个对话框.

有人知道解决这个问题的方法吗?我只想打印 Iframe,而不是父级。

最佳答案

试试这个。把它放在所说的 iframe 中:

function printPage() { print(); }

然后在父级中:

function printIframe(id)
{
    var iframe = document.frames ? document.frames[id] : document.getElementById(id);
    var ifWin = iframe.contentWindow || iframe;
    iframe.focus();
    ifWin.printPage();
    return false;
}

如果这也不起作用,我会尝试打开一个新窗口/标签,并用可打印的 HTML 填充它。

var printwin = window.open("about:blank", "_new");
printwin.document.open();
printwin.document.write("HTML goes here..javascript which is going to print is in there too..");
printwin.document.close();

需要注意的两件小事是

  • 拆分</script>在新窗口中,这样您就不会过早终止
  • 在 onLoad() 完成后使用 setTimeout() 执行,否则 Firefox 用户可能会在打印对话框下方看到空白页

关于javascript - Safari:打印 Iframe 时防止出现两个打印对话框,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3258450/

相关文章:

javascript - 多个选项卡列表 : How to show only the content of the clicked tab list?

javascript - jQuery onclick,选择输入框并按回车键(渲染html)

javascript - 来自外部js文件的html5 Canvas 不起作用

javascript - 如何使用 Python 发送对 POST 请求的响应?

javascript - 如何动态调整自定义 CSS 属性?

javascript - vue报错没有意义 : Unhandled error during execution of scheduler flush. onVnodeUnmounted=fn<onVnodeUnmounted> ref=Ref< null >>

html 列适合内容但并排时匹配高度(没有 jQuery)

java - 如何在 Mac 机器的 Safari 浏览器上运行 selenium 脚本

html - Safari text-input 渲染输入框下方的文字

css - 使用 fx-layout ="column"的 Safari IOS 的 Flex 布局显示问题