2014-08-27 84 views
0

嗨,大家好,我正在使用这个jQuery函数来打印div内容。 第一次显示/打印空白页面。但第二次它的工作。 它显示div内容在console.log()但不打印这些内容。打印div内容时出错

我想找出问题,但坚持下去。请帮忙

在此先感谢。

jQuery.fn.LBCprint = function() 
{ 
    var jStyleDiv = ''; 
    var strFrameName = ("printer-" + (new Date()).getTime()); 
    var jFrame = $("<iframe name='"+strFrameName+"'>"); 
    jFrame.css("width", "1px").css("height", "1px").css("position", "absolute").css("left", "-9999px").appendTo($("body:first")); 

    // Get a FRAMES reference to the new frame. 
    var objFrame = window.frames[strFrameName]; 

    // Get a reference to the DOM in the new frame. 
    var objDoc = objFrame.document; 

    jStyleDiv = $("<div>").append(
     $("style").clone() 
    ); 

    objDoc.open(); 
    objDoc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); 
    objDoc.write("<html>"); 
    objDoc.write("<head>"); 
    objDoc.write("<title>"); 
    objDoc.write(document.title); 
    objDoc.write("</title>"); 
    objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/n/css/main_style_print.css\" />"); 
    objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/n/css/dashboard.css\" />"); 
    objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/assets/css/pagination.css\" />"); 
    objDoc.write("</head>"); 
    objDoc.write("<body>"); 
    objDoc.write(jStyleDiv.html()); 
    objDoc.write(this.html()); 
    objDoc.write("</body>"); 
    objDoc.write("</html>"); 
    objDoc.close(); 

    // Print the document. 
    objFrame.focus(); 
    objFrame.print(); 

    jStyleDiv = ''; 

    setTimeout(function(){ 
     jFrame.remove(); 
    }, (10000)); 
} 
+1

**不要**使用'document.write',但奇怪的是覆盖文件。 – adeneo 2014-08-27 15:05:24

+0

@adeneo什么是替代? plz – Haseeb 2014-08-27 15:08:03

+0

您正在使用jQuery,请阅读文档? – adeneo 2014-08-27 15:16:00

回答

0

你的代码

// Print the document. 
objFrame.onload = function(){ 
    objFrame.focus(); 
    objFrame.print(); 
    jFrame.remove(); 
}; 

更换

// Print the document. 
objFrame.focus(); 
objFrame.print(); 

后工作正常,我我猜你的框架有时ISN”在打印时呈现。

0

你可以尝试以下方法:

html = "<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"; 
    html += "<html>"; 
    html += "<head>"; 
    html += "<title>"; 
    html += document.title; 
    html += "</title>"; 
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/n/css/main_style_print.css\" />"; 
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/n/css/dashboard.css\" />"; 
    html += "<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com/assets/css/pagination.css\" />"; 
    html += "</head>"; 
    html += "<body>"; 
    html += jStyleDiv.html(); 
    html += this.html(); 
    html += "</body>"; 
    html += "</html>"; 

    objDoc.open(); 
    objDoc.write(html); 
    objDoc.close(); 
+0

亲爱的不是同样的问题 – Haseeb 2014-08-27 15:27:07

+0

这段代码会在每一行重新定义''''html'''变量。到此结束,你只是调用'''objDoc.write('');'''' – 2014-11-05 22:00:38

+0

你是对的。修复。 – 2014-11-06 02:44:06

0

我这样做了这个简单的方法,您可以使用$而不是jQuery来使所有的简单,以便不发生冲突。我只是打印正文内容。

$.fn.LBCprint = function() 
{ 
var jStyleDiv = ''; 
var strFrameName = ("printer-" + (new Date()).getTime()); 
var jFrame = $("<iframe name='"+strFrameName+"'>"); 
jFrame.css("width", "1px").css("height", "1px").css("position", 
"absolute").css("left", "-9999px").appendTo($("body:first")); 

// Get a FRAMES reference to the new frame. 
var objFrame = window.frames[strFrameName]; 

// Get a reference to the DOM in the new frame. 
var objDoc = objFrame.document; 

jStyleDiv = $("<div>").append(
    $("style").clone() 
); 

objDoc.open(); 
objDoc.write("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" 
       \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">"); 
objDoc.write("<html>"); 
objDoc.write("<head>"); 
objDoc.write("<title>"); 
objDoc.write(document.title); 
objDoc.write("</title>"); 
objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com 
       /n/css/main_style_print.css\" />"); 
objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com 
      /n/css/dashboard.css\" />"); 
objDoc.write("<link rel=\"stylesheet\" type=\"text/css\" href=\"https://www.abc.com 
       /assets/css/pagination.css\" />"); 
objDoc.write("</head>"); 
objDoc.write("<body>"); 
objDoc.write(jStyleDiv.html()); 
objDoc.write(document.body.innerHTML); 
objDoc.write("</body>"); 
objDoc.write("</html>"); 
objDoc.close(); 

// Print the document. 
objFrame.focus(); 
objFrame.print(); 

jStyleDiv = ''; 

setTimeout(function(){ 
    jFrame.remove(); 
}, (10000)); 
} 

这里是Fiddle