Jquery печать часть проблемы веб-страницы в IE - PullRequest
0 голосов
/ 14 сентября 2011

Я попытался использовать следующий плагин печати JQuery для печати только содержимого div на странице. Это работает в IE6 Firefox, но не в IE8. IE8 печатает реальную страницу, а не просто «печатный» контент класса. Возможно, у меня та же проблема в IE7, но я еще не тестировал ее. Есть ли какое-либо решение, которое заставило бы код печати ниже работать в IE8 и / или IE7?

Ссылка на страницу: 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)
    );
}

1 Ответ

1 голос
/ 22 февраля 2012

У меня была такая же проблема.Содержимое iframe загружается не так быстро, как запускается команда печати, поэтому IE видит его как пустой документ и переключается на печать родительского документа.

Проверьте эту тему: Печать содержимогодинамически создаваемый iframe из родительского окна

Таким образом, вместо

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

используйте

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

Надеюсь, это работает для вас так же, как и для меня.

...