0

ページのdivコンテンツのみを印刷するために、次のJQuery印刷プラグインを使用してみました。それはFirefoxではIE6で動作しますがIE8では動作しません。 IE8は、単に "印刷可能な"クラスの内容ではなく、実際のページを印刷します。おそらく私はIE7で同じ問題を抱えていますが、私はまだそれをテストしていません。 IE8やIE7で印刷コードを動作させる解決策はありますか?IEでのWebページの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はそれをヌルドキュメントとして認識し、親ドキュメントの印刷に切り替わります。

チェックこのトピック:それは私のために働いたとしてまとめる 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