为什么这个基于javascript的打印会导致Safari刷新页面?

时间:2012-02-13 13:26:08

标签: javascript jquery printing safari webkit

我正在处理的页面有一个javascript函数,用于打印部分页面。 出于某种原因,在Safari中打印会导致窗口以某种方式更新。我以某种方式说,因为它不会像重新加载页面那样真正刷新,而是从开始开始“渲染”页面,即滚动到顶部,flash动画从0开始,依此类推。

效果由这个小提琴复制:http://jsfiddle.net/fYmnB/

单击打印按钮并在Safari中完成或取消打印会导致屏幕“变白”一秒钟,这在我的真实网站中表现为“喜欢”重新加载。在运行打印按钮时,比方说,Firefox,只需打开和关闭打印对话框,而不会以任何方式影响小提琴页面。

我的调用浏览器打印方法是否会导致这种情况,或者如何解释?并且最好避免使用?

P.S。:在我的真实网站上,Chrome也是如此。在示例中,Chrome似乎没有显示与Safari相同的行为。

修改:我还尝试将打印按钮放在与a锚点不同的标记上,例如spanbutton,但这对此问题没有帮助。< / p>

编辑:我在Mac OS 10.6.8上使用Safari 5.1.2遇到了这个问题。在jsfiddle示例中,行为显示为白色“闪烁”,在单击打印按钮并关闭(打印或中止)打印对话框后覆盖整个浏览器。

编辑:刚刚开始为这个问题提供赏金,因为我仍然在寻找这种浏览器行为的解释。我非常愿意提供有关这个问题的更多细节。根据我在SO上的经验,不建议发布在线页面的链接,但我觉得这个问题很难再现。我认为我发布的jsfiddle的“闪烁和重新渲染”有望成为同样问题的结果。

编辑:正如评论中所解释的那样,打开一个包含应用程序当前状态的新窗口,然后打印和关闭该窗口,可能是一个修复,但我认为这不足以解决手头的问题。

5 个答案:

答案 0 :(得分:4)

如果您无法找到解决问题的方法,可以通过以下方式快速解决问题: var win=window.open()您所在的同一页面 然后win.print(),然后win.close()。希望这会有所帮助。

答案 1 :(得分:3)

可悲的是,我没有解决方案。但是因为我能够在Safari和Webkit中用小提琴重现这个,我想我至少会提供我的观察结果:

  1. 如果立即点击“打印”对话框按钮,则不会发生白化。在点击“打印”之前,您需要等待几秒才能看到白色。在OSX 10.6.8上,我看到了旋转沙滩球出现的门槛。
  2. 当打印按钮点击时鼠标保持静止,页面保持白色,直到您再次移动鼠标(沙滩球还在旋转)。
  3. 希望这会有所帮助。

答案 2 :(得分:2)

由于window.print()似乎not part of any standard,浏览器可以自由选择的方式实现它。

我能看到的唯一解决方法是,如果你真的必须按原样离开页面,那就是打开另一个窗口并打印出来。这是另一种可能更糟的蠕虫。

答案 3 :(得分:2)

我不确定这是否能解决您的问题,但我最近发现了一个非常好的Jquery插件,只能打印您网页的某些部分。

你应该试一试:)它有一些非常酷的参数来根据你的需要定制它。

看看here

为什么页面会刷新?这是我的答案。 window.print()函数将打印页面的全部内容。所以,既然我读到你只想打印页面的一部分,我想你正在使用一些函数在很短的时间内从页面中删除所有不需要的内容,然后你调用window.print()函数,之后你把所有的原始内容再次放在屏幕上。这样会产生非常短的闪光,看起来您的页面会刷新,并会再次加载所有闪光灯部件。

昨天我遇到了同样的问题,这个jquery插件真的帮助了我。我希望它也能帮到你。

度过美好的一天!

答案 4 :(得分:0)

在你的函数中试试这个:

document.write("<script type='text/javascript'>window.print()</script>");

我正在引用此堆栈:

After window.open, can't print in Safari for Mac

更新,尝试:

document.writeln("<script type='text/javascript'>window.print()</script>");