Safari:打印Iframe时防止两个打印对话框

Dio*_*ane 8 html javascript safari

我的网站有一个"打印此页面"按钮.

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

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

有没有人知道这方面的方法?我只想打印iframe,而不是父.

Mic*_*kis 0

尝试这个。将其放入所述 iframe 中:

function printPage() { print(); }
Run Code Online (Sandbox Code Playgroud)

然后在父级中:

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

如果这也不起作用,我会尝试打开一个新窗口/选项卡,并用可打印的 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();
Run Code Online (Sandbox Code Playgroud)

需要注意的两个小事情是

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