Blame | Letzte Änderung | Log anzeigen | RSS feed
/** printThis v1.5* @desc Printing plug-in for jQuery* @author Jason Day** Resources (based on) :* jPrintArea: http://plugins.jquery.com/project/jPrintArea* jqPrint: https://github.com/permanenttourist/jquery.jqprint* Ben Nadal: http://www.bennadel.com/blog/1591-Ask-Ben-Print-Part-Of-A-Web-Page-With-jQuery.htm** Licensed under the MIT licence:* http://www.opensource.org/licenses/mit-license.php** (c) Jason Day 2014** Usage:** $("#mySelector").printThis({* debug: false, * show the iframe for debugging* importCSS: true, * import page CSS* importStyle: false, * import style tags* printContainer: true, * grab outer container as well as the contents of the selector* loadCSS: "path/to/my.css", * path to additional css file - us an array [] for multiple* pageTitle: "", * add title to print page* removeInline: false, * remove all inline styles from print elements* printDelay: 333, * variable print delay* header: null, * prefix to html* formValues: true * preserve input/form values* });** Notes:* - the loadCSS will load additional css (with or without @media print) into the iframe, adjusting layout*/;(function($) {var opt;$.fn.printThis = function(options) {opt = $.extend({}, $.fn.printThis.defaults, options);var $element = this instanceof jQuery ? this : $(this);var strFrameName = "printThis-" + (new Date()).getTime();if (window.location.hostname !== document.domain && navigator.userAgent.match(/msie/i)) {// Ugly IE hacks due to IE not inheriting document.domain from parent// checks if document.domain is set by comparing the host name against document.domainvar iframeSrc = "javascript:document.write(\"<head><script>document.domain=\\\"" + document.domain + "\\\";</script></head><body></body>\")";var printI = document.createElement('iframe');printI.name = "printIframe";printI.id = strFrameName;printI.className = "MSIE";document.body.appendChild(printI);printI.src = iframeSrc;} else {// other browsers inherit document.domain, and IE works if document.domain is not explicitly setvar $frame = $("<iframe id='" + strFrameName + "' name='printIframe' />");$frame.appendTo("body");}var $iframe = $("#" + strFrameName);// show frame if in debug modeif (!opt.debug) $iframe.css({position: "absolute",width: "0px",height: "0px",left: "-600px",top: "-600px"});// $iframe.ready() and $iframe.load were inconsistent between browserssetTimeout(function() {var $doc = $iframe.contents(),$head = $doc.find("head"),$body = $doc.find("body");// add base tag to ensure elements use the parent domain$head.append('<base href="' + document.location.protocol + '//' + document.location.host + '">');// import page stylesheetsif (opt.importCSS) $("link[rel=stylesheet]").each(function() {var href = $(this).attr("href");if (href) {var media = $(this).attr("media") || "all";$head.append("<link type='text/css' rel='stylesheet' href='" + href + "' media='" + media + "'>")}});// import style tagsif (opt.importStyle) $("style").each(function() {$(this).clone().appendTo($head);//$head.append($(this));});//add title of the pageif (opt.pageTitle) $head.append("<title>" + opt.pageTitle + "</title>");// import additional stylesheet(s)if (opt.loadCSS) {if( $.isArray(opt.loadCSS)) {jQuery.each(opt.loadCSS, function(index, value) {$head.append("<link type='text/css' rel='stylesheet' href='" + this + "'>");});} else {$head.append("<link type='text/css' rel='stylesheet' href='" + opt.loadCSS + "'>");}}// print headerif (opt.header) $body.append(opt.header);// grab $.selector as containerif (opt.printContainer) $body.append($element.outer());// otherwise just print interior elements of containerelse $element.each(function() {$body.append($(this).html());});// capture form/field valuesif (opt.formValues) {// loop through inputsvar $input = $element.find('input');if ($input.length) {$input.each(function() {var $this = $(this),$name = $(this).attr('name'),$checker = $this.is(':checkbox') || $this.is(':radio'),$iframeInput = $doc.find('input[name="' + $name + '"]'),$value = $this.val();//order matters hereif (!$checker) {$iframeInput.val($value);} else if ($this.is(':checked')) {if ($this.is(':checkbox')) {$iframeInput.attr('checked', 'checked');} else if ($this.is(':radio')) {$doc.find('input[name="' + $name + '"][value=' + $value + ']').attr('checked', 'checked');}}});}//loop through selectsvar $select = $element.find('select');if ($select.length) {$select.each(function() {var $this = $(this),$name = $(this).attr('name'),$value = $this.val();$doc.find('select[name="' + $name + '"]').val($value);});}//loop through textareasvar $textarea = $element.find('textarea');if ($textarea.length) {$textarea.each(function() {var $this = $(this),$name = $(this).attr('name'),$value = $this.val();$doc.find('textarea[name="' + $name + '"]').val($value);});}} // end capture form/field values// remove inline stylesif (opt.removeInline) {// $.removeAttr available jQuery 1.7+if ($.isFunction($.removeAttr)) {$doc.find("body *").removeAttr("style");} else {$doc.find("body *").attr("style", "");}}setTimeout(function() {if ($iframe.hasClass("MSIE")) {// check if the iframe was created with the ugly hack// and perform another ugly hack out of neccessitywindow.frames["printIframe"].focus();$head.append("<script> window.print(); </script>");} else {// proper method$iframe[0].contentWindow.focus();$iframe[0].contentWindow.print();}//remove iframe after printif (!opt.debug) {setTimeout(function() {$iframe.remove();}, 1000);}}, opt.printDelay);}, 333);};// defaults$.fn.printThis.defaults = {debug: false, // show the iframe for debuggingimportCSS: true, // import parent page cssimportStyle: false, // import style tagsprintContainer: true, // print outer container/$.selectorloadCSS: "", // load an additional css file - load multiple stylesheets with an array []pageTitle: "", // add title to print pageremoveInline: false, // remove all inline stylesprintDelay: 333, // variable print delayheader: null, // prefix to htmlformValues: true // preserve input/form values};// $.selector containerjQuery.fn.outer = function() {return $($("<div></div>").html(this.clone())).html()}})(jQuery);