网站搜索

打印 - Safari 使用 JavaScript window.print() 的打印问题


我在 Safari 上打印时遇到了问题。我的系统是 Windows 7,这个功能在除 Safari 外的所有其他浏览器中都能正常工作。情况如下:

window.onload = function(){
    console.log('before print');
    window.print();
}

它不会在控制台面板输出日志,但打印页面会先出现,在我在打印页面选择取消后,日志才会输出。

有人遇到过这个问题吗?任何帮助都将不胜感激。

已更新

我现在的情况是:我们需要打印一个页面,其内容可以通过用户勾选和取消勾选复选框来更改,并且只打印页面的内容部分,因此我们创建了一个只包含打印内容的新页面。在这个页面中,我们需要隐藏用户未选择的不必要内容,所以在调用 window.print() 之前,我们需要进行一些 DOM 操作。console.log() 只是用于观察的示例代码。我尝试在测试 HTML 中添加一个 <div id='test'>Test HTML</div> 并添加

var test = document.getElementById('test');
test.style.background = 'yellow';

在 window.print(); 之前,它在我的 Safari 浏览器中显示相同的结果,‘Test HTML’ 直到我点击打印面板的取消按钮才会变成黄色,所以这不仅仅是 console.log 的问题。

已更新

我正在 Windows 7 上使用 Safari 5.1.7(7534.57.2)

答案#1

对我来说,setTimeout 方案不起作用。我找到了这个 jQuery 插件 https://github.com/jasonday/printThis,它提供了很多针对 window.print() 的解决方法,因为似乎并不是所有浏览器都完全支持它。

我采用了这行对我有效的 Safari 代码 document.execCommand("print", false, null)

目前在 Safari 和 Chrome 上,这对我来说还可以

try {
  document.execCommand('print', false, null);
}
catch(e) {
  window.print();
}

答案#2

这是奇怪的行为。我在 Mac 上的 Safari 6.1 中测试过。

但我可以问一下,你为什么需要在打印之前记录一些东西吗?因为看起来所有的功能都是在打印面板弹出之前就被执行了:

<script src="http://code.jquery.com/jquery-2.1.0.min.js"></script>

<script>
window.onload = function() {

    $('body').html('before print');

    console.log('before print');

    window.print();
};
</script>

当你查看打印预览时,页面上会显示“打印前”的文字。出于某种原因,控制台只有在打印面板关闭时才会记录这些文字,但在我看来,这对你的访客来说并不重要。你可以操作 DOM,并在打印过程之前随意更改页面。