IE8 bleibt nach dem Drücken der Schaltfläche "Drucken" im Browser-Druckdialog hängen, wenn mit Javascript erstellte Inhalte über einen Iframe gerendert werden

Ich arbeite seit ein paar Wochen an diesem Thema und konnte es nicht lösen. Das Problem wird nur von einer kleinen Gruppe von IE8-Benutzern gemeldet. Ich habe versucht, das Problem zu reproduzieren, indem ich eine VM von Windows XP, IE8 (Bericht der gleichen Version Benutzer) und synchronisierte Browser-Sicherheitseinstellungen ausführen. Trotzdem kann ich das Problem nicht für mich reproduzieren. Es wäre großartig, es zu reproduzieren, aber letztlich zählt nur die Ursache des Problems.

Die Funktionsweise der Druckfunktion ist:

  1. User presses a link on the page which triggers a JavaScript function.
  2. The JavaScript performs some logic to get the content of a subsection of the page (based on which print link was clicked).
  3. "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/

Der Benutzer wird dann mit einem Druckdialog von IE aufgefordert. Wenn der Benutzer die Schaltfläche "Drucken" drückt, bleibt der IE hängen und kann nur durch Beenden des Prozesses heruntergefahren werden. Wenn der Benutzer auf "Abbrechen" klickt, bleibt der IE nicht hängen und der Benutzer kann seine Arbeit fortsetzen.

Der Benutzer kann die Standarddruckfunktion verwenden, um die gesamte Seite ohne Probleme zu drucken. Nur wenn sie meine JavaScript-basierte Druckfunktion verwenden, hängt der Browser.

Ich ließ den Benutzer No-Addon IE8 ausführen, in ihrem Windows-Ereignisprotokoll suchen und einige allgemeine Problemfeatures in IE8 deaktivieren.

Ich bin wirklich ratlos darüber, wo dieser Fehler im Prozess auftauchen könnte. Es scheint auf mein Javascript zu zeigen, aber es verstopft mich, dass der Fehler auftritt, nachdem der Druckdialog des Browserdruckdialogs gedrückt wird. Ich würde erwarten, dass der Fehler auftritt, bevor die window.print() - Funktion für den fokussierten iframe aufgerufen wird.

Jede Hilfe würde sehr geschätzt werden, da dieser Bug mich ziemlich frustriert hat.

Vielen Dank.

BEARBEITEN----------------------------------------

Ich benutze die Standard-Jquery-Print-Bibliothek oben mit einer leicht angepassten _getMarkup-Funktion, wie unten gezeigt:

    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("

"+$(".title",$(element).parent().parent().children(":first")).text() +"

");
    $(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('');
};
1
"Wenn der Benutzer die Schaltfläche" print "drückt, bleibt der IE hängen und kann nur durch Beenden des Prozesses heruntergefahren werden." - Das scheint wirklich ein Betriebssystemproblem zu sein. Und wenn Sie das Problem nicht reproduzieren oder Code zur Überprüfung bereitstellen können, gibt es wenig, was wir tun können, außer Ihnen Fehlerbehebungshinweise zu geben ... dann sind wir nicht am Thema.
hinzugefügt der Autor Sparky, Quelle
Ich dachte etwas in diese Richtung, aber die Tatsache, dass sie einfach auf meine Seite gehen und "Datei -> Drucken" gehen können und es funktioniert gut, lässt mich denken, dass es etwas mit dem Javascript oder meinem Druckprozess zu tun hat. Soweit Code Review geht, verwende ich die oben genannte Bibliothek. Ich habe auch die Modifikationen hinzugefügt, die ich zu dem obigen Beitrag gemacht habe, die ziemlich minimal sind. Ich wäre auch gerne zu allen Tipps zur Fehlerbehebung, da ich fühle, dass ich mein Arsenal erschöpft habe.
hinzugefügt der Autor Bryce, Quelle
Ich hatte ähnliche Probleme mit einer Seite, auf der Inhalt in JS gerendert wurde, und hatte CSS, das die meisten Elemente auf der Seite verbarg. Die Seite war im Grunde eine normale Seite mit verschiedenen CSS. Die normale Version funktionierte gut, aber sobald das neue Stylesheet eingeführt wurde, begannen die Probleme. Also meine beste Vermutung war, dass das schwere CSS-Verbergen und schweres JS (Map) -Rendering zu viel war, als dass IE8 es hätte handhaben können.
hinzugefügt der Autor Marcus, Quelle
JavaScript - Deutsche Gemeinschaft
JavaScript - Deutsche Gemeinschaft
3 der Teilnehmer

In dieser Gruppe sprechen wir über JavaScript.