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

kon*_*tur 27 javascript printing safari jquery webkit

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

这个小提琴重现了这个效果:http://jsfiddle.net/fYmnB/

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

有什么方法可以用我的方式调用浏览器打印方法导致这种情况,或者如何解释 - 最好是避免?

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

编辑:我也尝试将打印按钮放在与a锚点不同的标签上,例如span或者button,但这对问题没有帮助.

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

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

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

Thd*_*hdK 2

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

您应该尝试一下:)它有一些非常酷的参数,可以根据您的需求进行自定义。

看看这里

为什么你的页面会刷新?这是我对此的回答。window.print() 函数将打印页面的全部内容。因此,由于我读到您只想打印页面的一部分,我猜您正在使用某些函数在很短的时间内从页面中删除所有不需要的内容,然后调用 window.print() 函数,然后再调用您将所有原始内容再次显示在屏幕上。这会导致非常短的闪存,看起来您的页面正在刷新,并将再次加载所有闪存部分。

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

祝你今天过得愉快!