IE8 se bloque après avoir appuyé sur le bouton "Imprimer" dans la boîte de dialogue d'impression du navigateur lors du rendu de contenu assembé avec javascript via un iframe

Je travaille sur ce problème depuis quelques semaines maintenant et je n’ai pas pu le résoudre. Le problème n'est signalé que par un petit sous-groupe d'utilisateurs d'IE8. J'ai tenté de reproduire le problème en exécutant une machine virtuelle de Windows XP, IE8 (rapport sur les utilisateurs de la même version) et les paramètres de sécurité du navigateur synchronisé. Malgré cela, je suis incapable de reproduire le problème pour moi-même. Le reproduire serait génial, mais au bout du compte, tout ce qui compte est de découvrir la source du problème.

La fonction d'impression fonctionne comme suit:

  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/

L'utilisateur est ensuite invité à indiquer un dialogue d'impression à partir d'IE. Lorsque l'utilisateur appuie sur le bouton "Imprimer", Internet Explorer se bloque et ne peut être arrêté qu'en mettant fin au processus. Si l'utilisateur clique sur "annuler", IE ne se bloque pas et l'utilisateur peut continuer à parler de son entreprise.

L'utilisateur peut utiliser la fonctionnalité d'impression par défaut pour imprimer la page entière sans problème. Ce n'est que lorsqu'ils ont utilisé ma fonction d'impression basée sur JavaScript que le navigateur se bloque.

L'utilisateur a exécuté IE8 sans addon, consulté son journal des événements Windows et désactivé certaines fonctionnalités problématiques courantes dans IE8.

Je suis vraiment perplexe quant à l'endroit où cette erreur peut se produire dans le processus. Cela semble pointer vers mon javascript, mais cela me laisse perplexe de penser que l'erreur se produit après que le bouton Imprimer du dialogue d'impression du navigateur est enfoncé. Je m'attendrais à ce que l'erreur se produise avant que la fonction window.print() soit appelée sur l'iframe ciblée.

Toute aide serait grandement appréciée, car ce bogue me donnait pas mal de frustration.

Merci.

MODIFIER----------------------------------------

J'utilise la bibliothèque d'impression standard jQuery ci-dessus avec une fonction _getMarkup légèrement personnalisée, comme illustré ci-dessous:

    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
"Lorsque l'utilisateur appuie sur le bouton" Imprimer ", IE se bloque et ne peut être arrêté qu'en mettant fin au processus." - Cela ressemble vraiment à un problème de système d'exploitation. Et si vous ne pouvez pas reproduire le problème ou fournir un code à réviser, nous ne pouvons rien faire d'autre que de vous fournir des pointeurs de dépannage ... nous sommes alors hors sujet.
ajouté l'auteur Sparky, source
Je pensais à quelque chose dans ce sens, mais le fait qu'ils puissent simplement aller sur ma page et aller dans "Fichier -> Imprimer" et que tout fonctionne bien me fait penser que cela a quelque chose à voir avec le processus JavaScript ou d'impression. En ce qui concerne l'examen du code, j'utilise la bibliothèque mentionnée ci-dessus. J'ai également ajouté les modifications apportées au post ci-dessus, qui sont plutôt minimes. Je serais également le bienvenu pour tout conseil de dépannage, car j’ai l’impression d’avoir épuisé mon arsenal.
ajouté l'auteur Bryce, source
J'ai eu des problèmes similaires avec une page où le contenu était rendu dans JS et CSS qui masquait la plupart des éléments de la page. La page était fondamentalement une page normale avec différents CSS. La version normale a fonctionné correctement, mais une fois la nouvelle feuille de style introduite, les problèmes ont commencé. Donc, ma meilleure hypothèse était que la lourde dissimulation CSS et le rendu lourd JS (map) étaient trop difficiles à gérer pour IE8.
ajouté l'auteur Marcus, source

Il n'y a pas de réponses.

0