google chrome 打印预览第一次没有加载页面
google chrome print preview does not load the page the first time
我正在尝试使用此代码打印页面
<html>
<head>
<script type="text/javascript">
function Popup()
{
var mywindow = window.open('', 'Ticket info', 'height=400,width=600');
mywindow.document.write('<html><head><title>my div</title>');
mywindow.document.write('<style type="text/css"> *{margin: 0; padding: 0;} body{padding: 3px; padding-left:20px;font:6px bold Arial;}</style>');
mywindow.document.write('<script src="http://code.jquery.com/jquery-latest.min.js"><'+'/script>');
mywindow.document.write('<script src="jquery-barcode.min.js"><'+'/script>');
mywindow.document.write('</head><body>');
mywindow.document.write('<div id="demo"></div>');
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
mywindow.document.write('</body></html>');
mywindow.print();
return true;
}
</script>
</head>
<body>
<input type="button" value="Print Div" onclick="Popup();" />
</body>
</html>
基本上它会弹出一个 window 并显示页面的打印预览。第一次尝试加载打印预览不会加载条形码,当您取消第一次打印预览然后右键单击页面并再次打印时,第二次打印预览现在将显示要打印的条形码。
我认为问题出在这一行:
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
当我评论这一行并向页面添加虚拟文本时。它将在第一次尝试时自动显示在打印预览中。
我之前在尝试从 css 文件加载样式时遇到过同样的问题。我通过将样式直接转移到弹出窗口 window 来解决这个问题。
我的问题是为什么会这样?以及如何在打印预览的第一次尝试时加载条形码?
我将 window.print() 命令移动到弹出窗口 window 上,它自己可以在打印前先加载 jquery 函数。
这是我添加的行。
mywindow.document.write('<script type="text/javascript">window.print();<'+'/script>');
这是完整的代码:
<html>
<head>
<script type="text/javascript">
function Popup()
{
var mywindow = window.open('', 'Ticket info', 'height=400,width=600');
mywindow.document.write('<html><head><title>my div</title>');
mywindow.document.write('<style type="text/css"> *{margin: 0; padding: 0;} body{padding: 3px; padding-left:20px;font:6px bold Arial;}</style>');
mywindow.document.write('<script src="http://code.jquery.com/jquery-latest.min.js"><'+'/script>');
mywindow.document.write('<script src="jquery-barcode.min.js"><'+'/script>');
mywindow.document.write('</head><body>');
mywindow.document.write('<div id="demo"></div>');
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
mywindow.document.write('<script type="text/javascript">window.print();<'+'/script>');
mywindow.document.write('</body></html>');
return true;
}
</script>
</head>
<body>
<input type="button" value="Print Div" onclick="Popup();" />
</body>
</html>
您需要在打印前延迟。
chrome 中存在原生缺陷。
代码如下:-
function PrintDiv(data) {
var mywindow = window.open();
var is_chrome = Boolean(mywindow.chrome);
mywindow.document.write(data);
if (is_chrome) {
setTimeout(function() { // wait until all resources loaded
mywindow.document.close(); // necessary for IE >= 10
mywindow.focus(); // necessary for IE >= 10
mywindow.print(); // change window to winPrint
mywindow.close(); // change window to winPrint
}, 250);
} else {
mywindow.document.close(); // necessary for IE >= 10
mywindow.focus(); // necessary for IE >= 10
mywindow.print();
mywindow.close();
}
return true;
}
实际上你可以创建一个扩展 css 并将你所有的 css 放在那里......
默认
mywindow.document.write('<link rel="stylesheet" type="text/css" href="/css/default.css"/>');
那就这样替换就好了
mywindow.document.write('<link rel="stylesheet" type="text/css" href="/css/default.css" media="print"/>');
只需添加 media='print' 即可识别..
希望对您有所帮助...
这对我有用(以及实施 Anand 观察到的 IE 10+ 要求):
function Popup() {
var _window = window.open('');
_window.document.write(data);
// required for IE >= 10
_window.document.close();
_window.focus();
_window.document.body.onload = function() {
// continue to print
_window.print();
_window.close();
};
return true;
}
这不是等待 window 加载并尝试过早打印它,而是等待整个 document.body
加载。
我正在尝试使用此代码打印页面
<html>
<head>
<script type="text/javascript">
function Popup()
{
var mywindow = window.open('', 'Ticket info', 'height=400,width=600');
mywindow.document.write('<html><head><title>my div</title>');
mywindow.document.write('<style type="text/css"> *{margin: 0; padding: 0;} body{padding: 3px; padding-left:20px;font:6px bold Arial;}</style>');
mywindow.document.write('<script src="http://code.jquery.com/jquery-latest.min.js"><'+'/script>');
mywindow.document.write('<script src="jquery-barcode.min.js"><'+'/script>');
mywindow.document.write('</head><body>');
mywindow.document.write('<div id="demo"></div>');
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
mywindow.document.write('</body></html>');
mywindow.print();
return true;
}
</script>
</head>
<body>
<input type="button" value="Print Div" onclick="Popup();" />
</body>
</html>
基本上它会弹出一个 window 并显示页面的打印预览。第一次尝试加载打印预览不会加载条形码,当您取消第一次打印预览然后右键单击页面并再次打印时,第二次打印预览现在将显示要打印的条形码。
我认为问题出在这一行:
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
当我评论这一行并向页面添加虚拟文本时。它将在第一次尝试时自动显示在打印预览中。
我之前在尝试从 css 文件加载样式时遇到过同样的问题。我通过将样式直接转移到弹出窗口 window 来解决这个问题。
我的问题是为什么会这样?以及如何在打印预览的第一次尝试时加载条形码?
我将 window.print() 命令移动到弹出窗口 window 上,它自己可以在打印前先加载 jquery 函数。
这是我添加的行。
mywindow.document.write('<script type="text/javascript">window.print();<'+'/script>');
这是完整的代码:
<html>
<head>
<script type="text/javascript">
function Popup()
{
var mywindow = window.open('', 'Ticket info', 'height=400,width=600');
mywindow.document.write('<html><head><title>my div</title>');
mywindow.document.write('<style type="text/css"> *{margin: 0; padding: 0;} body{padding: 3px; padding-left:20px;font:6px bold Arial;}</style>');
mywindow.document.write('<script src="http://code.jquery.com/jquery-latest.min.js"><'+'/script>');
mywindow.document.write('<script src="jquery-barcode.min.js"><'+'/script>');
mywindow.document.write('</head><body>');
mywindow.document.write('<div id="demo"></div>');
mywindow.document.write('<script type="text/javascript">$("#demo").barcode("1234567890128", "code39");<'+'/script>');
mywindow.document.write('<script type="text/javascript">window.print();<'+'/script>');
mywindow.document.write('</body></html>');
return true;
}
</script>
</head>
<body>
<input type="button" value="Print Div" onclick="Popup();" />
</body>
</html>
您需要在打印前延迟。 chrome 中存在原生缺陷。
代码如下:-
function PrintDiv(data) {
var mywindow = window.open();
var is_chrome = Boolean(mywindow.chrome);
mywindow.document.write(data);
if (is_chrome) {
setTimeout(function() { // wait until all resources loaded
mywindow.document.close(); // necessary for IE >= 10
mywindow.focus(); // necessary for IE >= 10
mywindow.print(); // change window to winPrint
mywindow.close(); // change window to winPrint
}, 250);
} else {
mywindow.document.close(); // necessary for IE >= 10
mywindow.focus(); // necessary for IE >= 10
mywindow.print();
mywindow.close();
}
return true;
}
实际上你可以创建一个扩展 css 并将你所有的 css 放在那里......
默认
mywindow.document.write('<link rel="stylesheet" type="text/css" href="/css/default.css"/>');
那就这样替换就好了
mywindow.document.write('<link rel="stylesheet" type="text/css" href="/css/default.css" media="print"/>');
只需添加 media='print' 即可识别..
希望对您有所帮助...
这对我有用(以及实施 Anand 观察到的 IE 10+ 要求):
function Popup() {
var _window = window.open('');
_window.document.write(data);
// required for IE >= 10
_window.document.close();
_window.focus();
_window.document.body.onload = function() {
// continue to print
_window.print();
_window.close();
};
return true;
}
这不是等待 window 加载并尝试过早打印它,而是等待整个 document.body
加载。