我正在处理的页面执行了一个 JavaScript 函数来打印页面的部分内容。 由于某种原因,在 Safari 中打印会导致窗口以某种方式更新。我之所以这么说,是因为它并不像重新加载页面那样真正刷新,而是从头开始“渲染”页面,即滚动到顶部,flash 动画从 0 开始,等等。
此 fiddle 再现了效果:http://jsfiddle.net/fYmnB/
在 Safari 中单击打印按钮并完成或取消打印会导致屏幕“变白”一秒钟,这在我的真实网站中表现为“类似于”重新加载。当使用 Firefox 运行打印按钮时,只需打开和关闭打印对话框,而不会以任何方式影响 fiddle 页面。
我调用浏览器打印方法的方式是否存在导致此问题的原因,或者如何解释 - 最好是避免?
P.S.:在我的真实网站上,Chrome 也会出现同样的情况。不过,在示例 fiddle 中,Chrome 似乎没有显示与 Safari 相同的行为。
编辑:我还尝试将打印按钮放在与 a
anchor 不同的标签上,例如 span
或 button
,但是那对解决问题没有帮助。
编辑:我在 Mac OS 10.6.8 上使用 Safari 5.1.2 时遇到了这个问题。在 jsfiddle 示例中,该行为显示为在单击打印按钮并关闭(打印或中止)打印对话框后覆盖整个浏览器的白色“闪烁”。
编辑:刚刚开始对这个问题进行悬赏,因为我仍在寻找此浏览器行为的解释。我非常愿意提供有关这个问题的更多细节。根据我的经验,不建议发布在线页面的链接,但我觉得这个问题确实很难重现。我认为我在发布的 jsfiddle 中遇到的“闪烁和重新渲染”希望是同一问题的结果。
编辑:正如评论中所解释的,打开一个包含应用程序当前状态的新窗口,然后打印并关闭该窗口,可能是一个解决方案,但我认为它不足以解决当前问题。
最佳答案
如果您无法找到解决问题的方法,您可以通过以下方式快速解决:
var win=window.open()
您所在的同一页面
然后是win.print()
,然后是win.close()
。希望这会有所帮助。
关于javascript - 为什么这种基于 javascript 的打印会导致 Safari 刷新页面?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9261335/