Chrome 打印空白页
Chrome print blank page
如果用户单击缩略图,我有一个旧的 javascript 代码可以打印图像。它以前工作得很好,但最近(仅在 Chrome!)预览时出现空白页。
JsBin中的演示:http://jsbin.com/yehefuwaso/7
单击打印机图标。现在在 Firefox 中试试;它会按预期工作。
Chrome: 41.0.2272.89 米
火狐:30.0、36.0.1
function newWindow(src){
win = window.open("","","width=600,height=600");
var doc = win.document;
// init head
var head = doc.getElementsByTagName("head")[0];
// create title
var title = doc.createElement("title");
title.text = "Child Window";
head.appendChild(title);
// create script
var code = "function printFunction() { window.focus(); window.print(); }";
var script = doc.createElement("script");
script.text = code;
script.type = "text/javascript";
head.appendChild(script);
// init body
var body = doc.body;
//image
doc.write('<img src="'+src+'" width="300">');
//chrome
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
win.printFunction();
} else {
win.document.close();
win.focus();
win.print();
win.close();
}
}
它似乎在 <img>
加载之前尝试打印,请将调用移到 window
的 load 事件的事件处理程序中进行打印] 通过将 link 作为 数据 URI 或 Blob 打开,例如
var code = '\
<html>\
<head>\
<title></title>\
<script>\
function printFunction() {\
window.focus();\
window.print();\
window.close();\
}\
window.addEventListener(\'load\', printFunction);\
</script>\
</head>\
<body><img src="'+src+'" width="300"></body>\
</html>';
window.open('data:text/html,' + code, '_blank', 'width=600,height=600');
别忘了您可能需要 HTML 编码 code
中的标签
您可能只在 <img>
上监听 load,但是如果您做过比尝试打印单个图像更复杂的事情,您可能会发现它以后再休息
doc.write('<img onload="printFunction();" src="'+src+'" width="300">');
其中 printFunction
是所有浏览器的打印功能
您需要等待图片加载完成:
var img = new Image();
img.src = src;
img.style.width = '300px';
img.onload = function(){
doc.write(img);
};
我在Chrome遇到了同样的问题。您可以尝试这些方法,第一个对我有用。 setTimeout 对我不起作用(必须稍后编辑)。
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
w = window.open();
w.document.write(printContents);
w.document.write('<scr' + 'ipt type="text/javascript">' + 'window.onload = function() { window.print(); window.close(); };' + '</sc' + 'ript>');
w.document.close(); // necessary for IE >= 10
w.focus(); // necessary for IE >= 10
return true;
}
设置超时:
<div id="printableArea">
<h1>Print me</h1>
</div>
<input type="button" onclick="printDiv('printableArea')" value="print a div!" />
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
w = window.open();
w.document.write(printContents);
w.document.close(); // necessary for IE >= 10
w.focus(); // necessary for IE >= 10
setTimeout(function () { // necessary for Chrome
w.print();
w.close();
}, 0);
return true;
}
如果用户单击缩略图,我有一个旧的 javascript 代码可以打印图像。它以前工作得很好,但最近(仅在 Chrome!)预览时出现空白页。
JsBin中的演示:http://jsbin.com/yehefuwaso/7 单击打印机图标。现在在 Firefox 中试试;它会按预期工作。
Chrome: 41.0.2272.89 米
火狐:30.0、36.0.1
function newWindow(src){
win = window.open("","","width=600,height=600");
var doc = win.document;
// init head
var head = doc.getElementsByTagName("head")[0];
// create title
var title = doc.createElement("title");
title.text = "Child Window";
head.appendChild(title);
// create script
var code = "function printFunction() { window.focus(); window.print(); }";
var script = doc.createElement("script");
script.text = code;
script.type = "text/javascript";
head.appendChild(script);
// init body
var body = doc.body;
//image
doc.write('<img src="'+src+'" width="300">');
//chrome
if (navigator.userAgent.toLowerCase().indexOf('chrome') > -1) {
win.printFunction();
} else {
win.document.close();
win.focus();
win.print();
win.close();
}
}
它似乎在 <img>
加载之前尝试打印,请将调用移到 window
的 load 事件的事件处理程序中进行打印] 通过将 link 作为 数据 URI 或 Blob 打开,例如
var code = '\
<html>\
<head>\
<title></title>\
<script>\
function printFunction() {\
window.focus();\
window.print();\
window.close();\
}\
window.addEventListener(\'load\', printFunction);\
</script>\
</head>\
<body><img src="'+src+'" width="300"></body>\
</html>';
window.open('data:text/html,' + code, '_blank', 'width=600,height=600');
别忘了您可能需要 HTML 编码 code
您可能只在 <img>
上监听 load,但是如果您做过比尝试打印单个图像更复杂的事情,您可能会发现它以后再休息
doc.write('<img onload="printFunction();" src="'+src+'" width="300">');
其中 printFunction
是所有浏览器的打印功能
您需要等待图片加载完成:
var img = new Image();
img.src = src;
img.style.width = '300px';
img.onload = function(){
doc.write(img);
};
我在Chrome遇到了同样的问题。您可以尝试这些方法,第一个对我有用。 setTimeout 对我不起作用(必须稍后编辑)。
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
w = window.open();
w.document.write(printContents);
w.document.write('<scr' + 'ipt type="text/javascript">' + 'window.onload = function() { window.print(); window.close(); };' + '</sc' + 'ript>');
w.document.close(); // necessary for IE >= 10
w.focus(); // necessary for IE >= 10
return true;
}
设置超时:
<div id="printableArea">
<h1>Print me</h1>
</div>
<input type="button" onclick="printDiv('printableArea')" value="print a div!" />
function printDiv(divName) {
var printContents = document.getElementById(divName).innerHTML;
w = window.open();
w.document.write(printContents);
w.document.close(); // necessary for IE >= 10
w.focus(); // necessary for IE >= 10
setTimeout(function () { // necessary for Chrome
w.print();
w.close();
}, 0);
return true;
}