带有javascript窗口的Safari打印问题。打印()
我对Safari上的打印有问题。我的系统是Windows7,这个功能在除Safari之外的所有其他浏览器中都能正常工作。情况如下:带有javascript窗口的Safari打印问题。打印(),javascript,printing,safari,Javascript,Printing,Safari,我对Safari上的打印有问题。我的系统是Windows7,这个功能在除Safari之外的所有其他浏览器中都能正常工作。情况如下: window.onload = function(){ console.log('before print'); window.print(); } 它不会在控制台面板中输出日志,但首先会显示打印页面,在打印页面中选择取消后,日志将被输出 有人提出过这个问题吗?任何帮助都将不胜感激 已更新 我的情况如下: 我们需要打印一个页面,用户可以通过选中和取
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()
有很多变通方法,因为它似乎不是所有浏览器都完全支持的
我在Safaridocument.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执行之前初始化打印,这意味着它会延迟日志。