赞
踩
$.fn.printThis.defaults = { |
debug: false, // 调试模式下打印文本的渲染状态 |
importCSS: true, // 为打印文本引入外部样式--link标签 ["<link rel='stylesheet' href='/static/jquery/forieprint.css' media='print'>","",""] |
importStyle: false, // 为打印把文本书写内部样式 ["<style>#ceshi{}</style>","",""] |
printContainer: true, // 设置为true,向文本中插入内容 |
loadCSS: "", // 为打印文本引入外部样式--路径 ["/static/jquery/forieprint.css","",""] |
pageTitle: "", // 为打印文本中添加<titile>标签,标签内容将在打印出的文件顶部显示,这里会和打印原有标题冲突,建议谨慎使用。"<title>测试header</title>" |
removeInline: false, // 清除body的默认样式,包括内外边距,字体等,目的是为了让渲染文本和打印文本保持一致 |
printDelay: 333, // 布局完打印页面之后与真正执行打印功能中间的间隔 |
header: null, // 在打印文本的body中添加header标签,这里的内容将在打印出的文件顶部居左显示 "<header>测试header</header>" |
formValues: true, // 如果打印的目标源码中又表单内容就选择true,这里是为新的打印文本中的表单赋值 |
doctypeString: '<!DOCTYPE html>' // 添加文档声明,使得渲染和打印保持一致 |
}; |
if (window.location.hostname !== document.domain && navigator.userAgent.match(/msie/i)) {//如果当前页面设置了document.domain的值&& 为ie浏览器 |
// 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.domain |
var iframeSrc = "javascript:document.write(\"<head><script>document.domain=\\\"" + document.domain + "\\\";</script></head><body></body>\")"; |
var printI = document.createElement('iframe'); //创建iframe节点 |
printI.name = "printIframe"; //设计节点的属性,name,id,className |
printI.id = strFrameName; |
printI.className = "MSIE"; |
document.body.appendChild(printI);//设置body的子元素为iframe |
printI.src = iframeSrc;//将当前iframe的src属性设置成当前页面的域,保持iframe和当前页面的document.main保持一直,实现跨域通信 |
} else {//非ie下不存在问题 |
// other browsers inherit document.domain, and IE works if document.domain is not explicitly set |
var $frame = $("<iframe id='" + strFrameName + "' name='printIframe' />"); |
$frame.appendTo("body"); |
} |
// 添加DOCTYPE来解决印刷和渲染之间的风格差异 |
function setDocType($iframe,doctype){ |
var win, doc; |
win = $iframe.get(0); |
win = win.contentWindow || win.contentDocument || win; //取得子窗口的document对象 |
doc = win.document || win.contentDocument || win; |
doc.open(); |
doc.write(doctype);//写入DOCTYPE |
doc.close(); |
} |
if(opt.doctypeString){//声明文档类型解决印刷与渲染之间的风格差异 |
setDocType($iframe,opt.doctypeString); |
} |
// 设置打印文本中的所有链接的url全部是主域名 |
$head.append('<base href="' + document.location.protocol + '//' + document.location.host + '">');//网络协议,域名+端口号 |
// 为打印文本添加新的外部样式--link |
if (opt.importCSS) $("link[rel=stylesheet]").each(function() {// 如果importCSS.opt返回true即样式引入方式为link标签引入,执行循环体 |
var href = $(this).attr("href"); //获取link标签的href属性 |
if (href) { |
var media = $(this).attr("media") || "all"; //获取link标签的media属性,这里应该设置为print |
$head.append("<link type='text/css' rel='stylesheet' href='" + href + "' media='" + media + "'>") |
} |
}); |
// 为打印文本添加新的内部样式 |
if (opt.importStyle) $("style").each(function() {//如果opt.importStyle返回true即样式在页面中直接写入。执行循环体 |
$(this).clone().appendTo($head);//将<style>标签以及内容克隆到<head>标签下 |
//$head.append($(this)); |
}); |
//为打印文本添加文本titile |
if (opt.pageTitle) $head.append("<title>" + opt.pageTitle + "</title>");//设置文档title名称 |
// 为打印文本添加新的外部样式--路径 |
if (opt.loadCSS) {//如果opt.loadCss返回true即样式以路径的方式引入 |
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 + "'>"); |
} |
} |
// 在body中插入<header>标签 |
if (opt.header) $body.append(opt.header);//在body中插入<header>标签 |
// 在body里面插入div里面的内容 |
if (opt.printContainer) $body.append($element.outer());//在body里面插入div里面的内容 |
//插入为空 |
else $element.each(function() { |
$body.append($(this).html()); |
}); |
// 返回原打印文本的所有代码 |
jQuery.fn.outer = |
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。