带有javascript窗口的Safari打印问题。打印()

带有javascript窗口的Safari打印问题。打印(),javascript,printing,safari,Javascript,Printing,Safari,我对Safari上的打印有问题。我的系统是Windows7,这个功能在除Safari之外的所有其他浏览器中都能正常工作。情况如下: window.onload = function(){ console.log('before print'); window.print(); } 它不会在控制台面板中输出日志,但首先会显示打印页面,在打印页面中选择取消后,日志将被输出 有人提出过这个问题吗?任何帮助都将不胜感激 已更新 我的情况如下: 我们需要打印一个页面,用户可以通过选中和取

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

window.onload = function(){
    console.log('before print');
    window.print();
}
它不会在控制台面板中输出日志,但首先会显示打印页面,在打印页面中选择取消后,日志将被输出

有人提出过这个问题吗?任何帮助都将不胜感激

已更新

我的情况如下: 我们需要打印一个页面,用户可以通过选中和取消选中复选框来更改该页面的内容,并且只打印该页面的内容部分,因此我们创建一个新页面,该页面只包含要打印的内容。在这个页面中,我们需要隐藏用户没有选择的不必要的内容,因此我们需要在调用
window.print()之前执行一些DOM操作。
console.log()。我试图在testhtml中添加一个
testhtml
,然后添加

var test = document.getElementById('test');
test.style.background = 'yellow';
window.print()之前,它在我的Safari浏览器中显示相同的结果,“测试HTML”不会变为黄色,直到我单击打印面板中的“取消”按钮,所以这不仅仅是
控制台.log
问题

已更新


我在Windows 7上使用Safari 5.1.7(7534.57.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>

window.onload=函数(){
$('body').html('before print');
console.log(“打印前”);
window.print();
};

当您查看打印预览时,页面上将显示“打印前”文本。出于某种原因,控制台只会在打印面板关闭时记录文本,但我认为这对访问者来说并不重要。您可以在打印过程之前随意操作DOM和更改页面。

经过多次尝试,下面的代码可以工作,但我不知道原因,有人能解释一下吗?还是这是一个狩猎虫

window.onload = function() {
    $('body').html('After change');
    setTimeout(window.print, 1000);
};

对我来说,
setTimeout
解决方案不起作用。我发现这个jQuery插件对
window.print()
有很多变通方法,因为它似乎不是所有浏览器都完全支持的

我在Safari
document.execCommand(“print”,false,null)

现在在safari和chrome中,这对我来说还行

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

Safari在加载页面之前打印页面,这与其他浏览器不同。因此,window.onload()可以在新打开的html页面的代码中使用。但如果打开的页面是非html内容,则不可能。下面的解决方案是跨浏览器和开放内容类型的全局解决方案

var printWindow = window.open(url, '_blank');
$(printWindow).load(function()
{
    this.print();
});

添加一个适用于我的案例的解决方案:

首先创建弹出窗口

$( ".myButton" ).click(function() {
    var url = 'www.google.com';
    var printWindow = window.open( url, '_blank');  
    printWindow.focus();
});
然后,在弹出窗口中加载的HTML页面内:

$(window).bind("load", function() {

    setTimeout( function () { 

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

    }, 500);

});

是@Stephan,没有必要添加
控制台.log
,但我确实需要在
窗口.print()
之前添加DOM操作代码,在我的Safari上,添加
窗口.print()总是在JS代码之前执行,即使我替换了
window.print()
而不是
setTimeout(window.print(),5000)
,也会发生同样的事情。这就是我的全部观点,DOM在
window.print()之前被操作。试试我在safari中的例子,当你查看打印预览时,你会看到页面上有文本否,在我的真实代码中,我确实在
window.print()之前操纵DOM,但它不起作用,这就是我问这个问题的原因。你可以看到我对这个问题的更新,我试图在
window.print()之前更改元素的文本颜色,但在单击“打印”面板上的“取消”按钮之前,颜色没有改变。我只是做了另一个测试,更改了文本颜色和背景色,效果很好。在你取消打印对话框之前,它不会显示在页面上,但当我打印页面时,它的颜色确实发生了变化,即使没有设置超时,所以我不确定它为什么不能与你的代码一起工作。好吧,也许这只是Windows Safari上发生的一个问题。只是一个注释(我知道这是一个后期注释,但适用于'14')。Safari早在'12年(Safari6问世时)就已经停止在Windows上使用了。因此,如果您试图在Windows上测试Safari,请知道它不会代表Mac上的Safari,并且知道许多“新”功能(如一些HTML5功能)无法正常工作,或者无法按预期工作。问题是,当打印初始化时,浏览器会停止javascript执行。Safari可能在console.log执行之前初始化打印,这意味着它会延迟日志。