我在Safari浏览器中打印时遇到问题。当我使用window.open(url)
并尝试打印这个新打开的URL时,它会尝试打印一个空白页面。
正如其他几个网站所建议的那样,我试图将延迟设置为3000毫秒。像,
window.open(url)
setTimeout(print, 3000);
这会尝试打印上一个窗口,而不是打开新选项卡
我在打印前尝试使用window.focus()
。它没有帮助。
答案 0 :(得分:0)
首先,setTimeout中传递的Window
对象是原始页面中的对象,因此您应该执行类似
var popup = window.open(url);
popup.onload= function(){
// this now refers to `popup`
this.print()
}
但是既然你提到了Safari问题,我会注意到这似乎只适用于这个浏览器中的普通文档页面(至少对于HTML文件)。
对于像data:image/...
这样的文档,window.open()
返回的Window对象没有任何属性(至少在10.9版本的Safari 9.1中,在其他版本中未尝试过),因此你可以不要调用popup.print()
方法。
一种方法是为自己创建页面,例如为图片添加<img>
标记,并将所需的网址添加为src
。
这取决于你打算打印的内容。
var url = 'data:image/png;base64,...';
// you have to keep a reference of the new Window
var popup = window.open(url);
var tryToPrint = function() {
// we have access to the window methods
if (popup.print) {
// call directly its print method
popup.print()
} else {
// close this one
popup.close();
// open a new blank one
popup = window.open('');
// create an image
var img = popup.document.createElement('img');
// reproduce default Safari's styles
img.setAttribute('style', '-webkit-user-select:none; display:block; margin:auto;');
// once the image has loaded, we can print the page
img.onload = function() {
popup.print()
};
popup.document.body.appendChild(img);
img.src = url;
}
};
// unfortunately, we can't even listen to the load event of the bugged popup
// so come back to an ugly timeout...
setTimeout(tryToPrint, 200);