Ik werk nu een paar weken aan dit probleem en heb dit niet kunnen oplossen. Het probleem wordt alleen gemeld door een kleine subset van IE8-gebruikers. Ik heb geprobeerd het probleem te reproduceren door een VM van Windows XP, IE8 (rapport met dezelfde versie van gebruikers) uit te voeren en de beveiligingsinstellingen van de browser te synchroniseren. Desondanks kan ik het probleem niet voor mezelf reproduceren. Het zou geweldig zijn om het te reproduceren, maar uiteindelijk gaat het er alleen maar om de oorzaak van het probleem te achterhalen.
De manier waarop de afdrukfunctie werkt, is:
- User presses a link on the page which triggers a JavaScript function.
- The JavaScript performs some logic to get the content of a subsection of the page (based on which print link was clicked).
- "exCanvas elements are set to display:none" because I found that they caused printing bugs.
4.The element is printed using a slightly modified version of "Print Element" found here: http://projects.erikzaadi.com/jQueryPlugins/jQuery.printElement/
De gebruiker wordt vervolgens gevraagd om een afdrukdialoog van IE. Wanneer de gebruiker op de knop "afdrukken" klikt, hangt IE vast en kan alleen worden afgesloten door het proces te beëindigen. Als de gebruiker op "annuleren" klikt, blijft IE niet hangen en kan de gebruiker doorgaan met zijn of haar bedrijf.
De gebruiker kan de standaard afdrukfunctionaliteit gebruiken om de hele pagina probleemloos af te drukken. Alleen als ze mijn javascript-gebaseerde printfunctie gebruikten, bleef de browser hangen.
Ik heb de gebruiker no-addon IE8 laten uitvoeren, in hun Windows-gebeurtenislogboek laten kijken en enkele veelvoorkomende probleemfuncties uitschakelen in IE8.
Ik ben echt stumped over waar in het proces deze fout kan optreden. Het lijkt erop te wijzen naar mijn JavaScript maar het stumped me dat de fout optreedt nadat op de knop voor het afdrukken van de afdrukknop voor de browser is gedrukt. Ik zou verwachten dat de fout optreedt voordat de functie window.print() wordt aangeroepen in het gefocuste iframe.
Alle hulp zou zeer op prijs worden gesteld, omdat deze bug me behoorlijk wat frustratie heeft bezorgd.
Bedankt.
BEWERK----------------------------------------
Ik gebruik de standaard jQuery-afdrukbibliotheek hierboven met een enigszins aangepaste _getMarkup-functie zoals hieronder te zien is:
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('');
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("
");
$(contentStr).append('<div>' + elementHtml + '</div>');
var refTable = "";
var total = $(".show-tooltip-text, .hidden_report",contentStr).each(function(index){
if(index == 0){
refTable += "Reference Table
<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("*ref: #"+index+"");
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('');
};