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

时间:2010-07-15 18:00:23

标签: javascript html safari

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

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

我尝试在iframe中调用window.print,并从父级调用它,目标是iframe(document.printFrame.window.print()),但我得到两个对话框。

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

2 个答案:

答案 0 :(得分:1)

我无法重现这个错误;它适用于我(即:我只得到一个打印对话框),无论我是从iframe还是父框架调用它。也许你在某处两次调用window.print()?

我在Mac OS X 10.6上运行Safari 4.0.3

编辑:这是:http://jsfiddle.net/Kq9dc/

编辑2:我刚刚在Safari 5.0 / Windows 7上对此进行了测试,它运行正常。你确定它不是代码中的其他内容吗?

编辑3 :刚在WinXP的几个Safari版本上测试过这个:

Safari 3.0 (first beta): Not working (no print dialog)
Safari 3.1 (first non-beta): Works fine
Safari 4.0: Works fine
Safari 5.0: Works fine

答案 1 :(得分:0)

试试这个。把它放在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>,因此您不会过早终止
  • 使用setTimeout()在onLoad()完成后执行,否则Firefox用户可能会在打印对话框下方看到空白页