0

페이지에서 div 콘텐츠 만 인쇄하려면 다음 JQuery 인쇄 플러그인을 사용해 보았습니다. IE6에서는 Firefox이지만 IE8에서는 작동하지 않습니다. IE8은 "인쇄 가능한"클래스 콘텐츠 대신 실제 페이지를 인쇄합니다. 아마도 IE7에서 같은 문제가 있지만 아직 테스트하지 않았습니다. 아래의 인쇄 코드를 IE8 및/또는 IE7에서 사용할 수있는 솔루션이 있습니까?IE에서 웹 페이지 문제의 Jquery 인쇄 부분

페이지 링크 : http://www.bennadel.com/blog/1591-Ask-Ben-Print-Part-Of-A-Web-Page-With-jQuery.htm

코드는 약간 또한 서식 인쇄 스타일 시트를 가져 아래 수정했습니다.

Blog Entry: Ask Ben: Print Part Of A Web Page With jQuery 
Author: Ben Nadel/Kinky Solutions 
Link: http://www.bennadel.com/index.cfm?dax=blog:1591.view 
Date Posted: May 21, 2009 at 9:10 PM 

// Create a jquery plugin that prints the given element. 

jQuery.fn.print = function(){ 
// NOTE: We are trimming the jQuery collection down to the 
// first element in the collection. 
if (this.size() > 1){ 
    this.eq(0).print(); 
    return; 
} else if (!this.size()){ 
    return; 
} 

// ASSERT: At this point, we know that the current jQuery 
// collection (as defined by THIS), contains only one 
// printable element. 

// Create a random name for the print frame. 
var strFrameName = ("printer-" + (new Date()).getTime()); 

// Create an iFrame with the new name. 
var jFrame = $("<iframe name='" + strFrameName + "'>"); 

// Hide the frame (sort of) and attach to the body. 
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; 

// Grab all the style tags and copy to the new 
// document so that we capture look and feel of 
// the current document. 

// Create a temp document DIV to hold the style tags. 
// This is the only way I could find to get the style 
// tags into IE. 
var jStyleDiv = $("<div>").append(
    $("style").clone() 
    ); 

// Write the HTML for the document. In this, we will 
// write out the HTML of the current element. 
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("<body>"); 
objDoc.write("<head>"); 
objDoc.write("<title>"); 
objDoc.write(document.title); 
objDoc.write("</title>"); 
objDoc.write(jStyleDiv.html()); 
// importing printable style sheet 
objDoc.write("<style type=\"text/css\"> @import url(\"./styles/Quiz_print.css\") </style>"); 
objDoc.write("</head>"); 
objDoc.write(this.html()); 
objDoc.write("</body>"); 
objDoc.write("</html>"); 
objDoc.close(); 

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

// Have the frame remove itself in about a minute so that 
// we don't build up too many of these frames. 
setTimeout(
    function(){ 
     jFrame.remove(); 
    }, 
    (60 * 1000) 
    ); 
} 
+0

IE 8에서 오류가 발생합니까? – b01

+0

인쇄 된 형식의 "인쇄 가능한"div 대신 실제 페이지를 인쇄하는 데 오류가 없습니다. – reinhat

+0

PC에서 로컬로 재밌는 코드는 잘 작동하지만, JSFiddle에 코드를 추가하면 코드가 제대로 작동합니다. – b01

답변

1

나는 동일한 문제가있었습니다. iframe의 내용이 인쇄 명령이 시작될 때까지 빠르게로드되지 않으므로 IE는 이것을 null 문서로보고 상위 문서 인쇄로 전환합니다.

확인이 주제 : 그것은 나를 위해 일한으로 요약 Printing contents of a dynamically created iframe from parent window

대신

objFrame.focus(); 
objFrame.print(); 

사용

jQuery("[name="+strFrameName+"]").load( 
     function() { 
      window.frames[strFrameName].focus(); 
      window.frames[strFrameName].print(); 
     } 
    ); 

희망이 당신을 위해 작동합니다.

+0

꽤 많은 검색을 한 후이 솔루션은 실제로 IE에서 인쇄를 변경했으며 이제는 금지 된 프레임 오류 대신 페이지가 나타납니다. 고마워요! – nrod