我已经在这个问题上工作了几个星期,现在无法解决它。该问题仅由一小部分IE8用户报告。我试图通过运行Windows xp,IE8(相同版本用户报告)的VM以及同步的浏览器安全设置来重现该问题。尽管如此,我无法为自己重现这个问题。重现它会很棒,但最重要的是发现问题的根源。
打印功能的工作方式是:
然后用IE提示用户打印对话框。当用户点击“打印”按钮时,IE挂起并且只能通过结束该过程来关闭。如果用户点击“取消”,则IE不会挂起,用户可以继续他们的业务。
用户可以使用默认打印功能无问题地打印整个页面。只有当他们使用我的基于javascript的打印功能时,浏览器才会挂起。
我让用户运行no-addon IE8,查看他们的Windows事件日志,并禁用IE8中的一些常见问题功能。
我真的很难过这个错误可能发生在哪个过程中。它似乎指向我的JavaScript,但它让我觉得按下浏览器打印对话框打印按钮后发生错误。我希望在重点iframe上调用window.print()函数之前发生错误。
任何帮助都会非常感激,因为这个错误让我感到非常沮丧。
感谢。
EDIT ----------------------------------------
我使用上面的标准jquery打印库和一个稍微自定义的_getMarkup函数,如下所示:
function _getMarkup(element, opts) {
var $element = $(element);
var elementHtml = _getElementHTMLIncludingFormElements(element);
var html = new Array();
html.push('<html><head><title>' + opts["pageTitle"] + '</title>');
if (opts["overrideElementCSS"]) {
if (opts["overrideElementCSS"].length > 0) {
for (var x = 0; x < opts["overrideElementCSS"].length; x++) {
var current = opts["overrideElementCSS"][x];
if (typeof (current) == 'string')
html.push('<link type="text/css" rel="stylesheet" href="' + current + '" >');
else
html.push('<link type="text/css" rel="stylesheet" href="' + current["href"] + '" media="' + current["media"] + '" >');
}
}
}
else {
$("link", document).filter(function () {
return $(this).attr("rel").toLowerCase() == "stylesheet";
}).each(function () {
html.push('<link type="text/css" rel="stylesheet" href="' + $(this).attr("href") + '" media="' + $(this).attr('media') + '" >');
});
}
//Ensure that relative links work
html.push('<base href="' + _getBaseHref() + '" />');
html.push(hieviews.getPrintCSS($("head").html()));
html.push('</head><body style="' + opts["printBodyOptions"]["styleToAdd"] + '" class="' + opts["printBodyOptions"]["classNameToAdd"] + '">');
var contentStr = $('<div></div>');
$(contentStr).append($('#disclaimer').html());
$(contentStr).append($('#nav').html());
$(contentStr).append("<hr/><h3 class='table-header'>"+$(".title",$(element).parent().parent().children(":first")).text() +"</h3>");
$(contentStr).append('<div>' + elementHtml + '</div>');
var refTable = "";
var total = $(".show-tooltip-text, .hidden_report",contentStr).each(function(index){
if(index == 0){
refTable += "<h3>Reference Table</h3><table class=\"dataTable\" id=\"cite\"><thead><tr><th>ref</th><th>Content</th></tr></thead><tbody>";
}
//if($(this).is(":hidden")){
if($(this).css("display") != "block"){
$(this).parent().append("<sup>*ref: #"+index+"</sup>");
refTable += "<tr><td>"+index+"</td><td>"+$(this).html()+"</td></tr>";
}
if(index == total){
refTable += "</tbody></table>";
}
}).length;
$(contentStr).append(refTable);
html.push($(contentStr).html());
html.push('<script type="text/javascript">function printPage(){focus();window.print();' + ((!$.browser.opera && !opts["leaveOpen"] && opts["printMode"].toLowerCase() == 'popup') ? 'close();' : '') + '}<\/script>');
html.push('</body></html>');
return html.join('');
};