打印功能无法在chrome中使用

时间:2015-04-23 14:44:53

标签: javascript html google-chrome

我的网站上有一个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>

5 个答案:

答案 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;
}

http://jsfiddle.net/doktormolle/q2zv4s54/

答案 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():

&#13;
&#13;
@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;
&#13;
&#13;

答案 4 :(得分:0)

对于那些可能遇到我同样问题的人。我决定将此添加为答案而不是评论。

我尝试了上述所有方法,即使在IE工程中,它仍然存在。然后,我尝试仅在此处(在任何网站上)按Ctrl + P,“打印预览...”仍停留在该位置。因此,我意识到这不是我的程序问题(或至少在那时)。因此,我将Chrome打印机切换为其他打印​​机(例如“保存为PDF”),然后又切换回“打印为PDF” ,它可以工作。...

不知道为什么突然变得异常。