我的网站上有一个print()函数,用于打印网站的特定部分。它在Firefox
上工作正常,甚至在Internet explorer
上工作正常,但不适用于chrome。它会打开对话框窗口并获取页面计数,但无法获取内容(以chrome形式显示)。
我的代码如下:
<a href="#" onclick="PrintElem('#press_releas11')"><img src="images/print_icon.png" width="35" height="23" /></a>
<div class="blog_post" id="press_releas11">
<div class="post_title"><h3>title here</h3></div>
<div class="post_article">content here</div>
</div>
脚本:
<script type="text/javascript">
function PrintElem(elem)
{
Popup($(elem).html());
}
function Popup(data)
{
var mywindow = window.open('', 'my div', 'height=400,width=600');
mywindow.document.write('<html><head><title>PressReleases</title>');
mywindow.document.write('<link rel="stylesheet" href="css/main.css" type="text/css" />');
mywindow.document.write('</head><body >');
mywindow.document.write(data);
mywindow.document.write('data');
mywindow.document.write('</body></html>');
mywindow.document.close(); // necessary for IE >= 10
mywindow.focus(); // necessary for IE >= 10
mywindow.print();
mywindow.close();
return true;
}
</script>
答案 0 :(得分:6)
Chrome似乎不喜欢document.write()
。在写入文档然后调用setTimeout
之后,它有助于添加mywindow.print()
1000ms,但由于这不是很实用,而且您似乎已经在使用jQuery,这是一个可行的解决方案:
https://jsfiddle.net/2n88pxee/
适用于Chrome和Firefox,但我没有尝试过所有其他浏览器。
编辑:这是评论中所要求的代码
function PrintElem(elem)
{
Popup($(elem).html());
}
function Popup(data)
{
var mywindow = window.open('', 'my div', 'height=400,width=600');
mywindow.document.head.innerHTML = '<title>PressReleases</title><link rel="stylesheet" href="css/main.css" type="text/css" />';
mywindow.document.body.innerHTML = '<body>' + data + '</body>';
mywindow.document.close();
mywindow.focus(); // necessary for IE >= 10
mywindow.print();
mywindow.close();
return true;
}
答案 1 :(得分:6)
问题似乎是嵌入式样式表,必须下载&#34;,需要一些时间,在文档完成之前尝试打印。
对我而言,当我readystate
文档的complete
开始打印时,它可以正常工作
function Popup(data)
{
var mywindow = window.open('', 'mydiv', 'height=400,width=600');
mywindow.document.open();
mywindow.document.onreadystatechange=function(){
if(this.readyState==='complete'){
this.onreadystatechange=function(){};
mywindow.focus();
mywindow.print();
mywindow.close();
}
}
mywindow.document.write('<html><head><title>PressReleases</title>');
mywindow.document.write('<link rel="stylesheet" href="css/main.css" type="text/css" />');
mywindow.document.write('</head><body >');
mywindow.document.write(data);
mywindow.document.write('data');
mywindow.document.write('</body></html>');
mywindow.document.close(); // necessary for IE >= 10
return true;
}
答案 2 :(得分:2)
使用document.write后,需要使用document.close。然后使用setInterval / clearInterval来观察文档写完的时间。在Mac上的Chrome中测试:
function Popup(data)
{
var mywindow = window.open('', 'my div', 'height=400,width=600');
mywindow.document.write('<html><head><title>PressReleases</title>');
mywindow.document.write('<link rel="stylesheet" href="css/main.css" type="text/css" />');
mywindow.document.write('</head><body >');
mywindow.document.write(data);
mywindow.document.write('data');
mywindow.document.write('</body></html>');
mywindow.document.close(); // necessary for IE >= 10
myDelay = setInterval(checkReadyState, 10);
function checkReadyState() {
if (mywindow.document.readyState == "complete") {
clearInterval(myDelay);
mywindow.focus(); // necessary for IE >= 10
mywindow.print();
mywindow.close();
}
}
return true;
}
答案 3 :(得分:2)
正如答案中提到的,它与秒有关,所以我使用了setTimeout():
@EventHandler
public void blockplace(BlockPlaceEvent event){
Player p = event.getPlayer();
int x = p.getLocation().getDirection().getBlockX();
int y = p.getLocation().getDirection().getBlockY();
int z = p.getLocation().getDirection().getBlockZ();
Location lookingLoc = new Location(p.getWorld(),x,y,z);
if (!event.getBlockPlaced().getLocation().equals(lookingLoc)){
//flag player...
}
}
&#13;
答案 4 :(得分:0)
对于那些可能遇到我同样问题的人。我决定将此添加为答案而不是评论。
我尝试了上述所有方法,即使在IE工程中,它仍然存在。然后,我尝试仅在此处(在任何网站上)按Ctrl + P,“打印预览...”仍停留在该位置。因此,我意识到这不是我的程序问题(或至少在那时)。因此,我将Chrome打印机切换为其他打印机(例如“保存为PDF”),然后又切换回“打印为PDF” ,它可以工作。...
不知道为什么突然变得异常。