【问题标题】:Safari: Prevent two print dialogs when printing an IframeSafari:打印 Iframe 时防止出现两个打印对话框
【发布时间】:2011-03-16 13:35:03
【问题描述】:

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

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

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

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

【问题讨论】:

    标签: javascript html safari


    【解决方案1】:

    试试这个。把它放在所说的 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 用户可能会在打印对话框下方看到一个空白页

    【讨论】: