IE8, tarayıcı yazdırma diyaloğunda "yazdırma" düğmesine bastıktan sonra iframe aracılığıyla javascript ile oluşturulmuş içeriği oluştururken kilitleniyor

Bu konuda birkaç haftadan beri çalışıyorum ve çözemedim. Sorun sadece IE8 kullanıcılarının küçük bir alt kümesi tarafından bildirilmektedir. Windows xp, IE8 (aynı sürüm kullanıcı raporu) bir VM ve tarayıcı güvenlik ayarlarını senkronize ederek sorunu yeniden üretmeye çalıştım. Buna rağmen, sorunu kendim için üretemiyorum. Tekrar üretilmesi harika olurdu, ama sonuçta sorunların kaynağını bulmak önemlidir.

Yazdırma işlevinin çalışma şekli:

  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/

Kullanıcıya, IE'den bir baskı diyalogu gelmesi istenir. Kullanıcı "yazdırma" düğmesine basarsa IE kilitlenir ve yalnızca işlemi sonlandırarak kapatılabilir. Kullanıcı "iptal et" IE isabet etmezse, kullanıcı askıda kalmaz ve kullanıcı işlerine devam edebilir.

Kullanıcı, tüm sayfayı sorunsuz yazdırmak için varsayılan yazdırma işlevini kullanabilir. Sadece tarayıcıda asılı olan JavaScript tabanlı yazdırma işlevimi kullandıklarında.

Kullanıcının IE8 no-addon'u çalıştırmasını, windows olay günlüğüne bakmasını ve IE8'deki bazı yaygın sorun özelliklerini devre dışı bırakmasını sağladım.

Bu hatanın ortaya çıktığı yerde gerçekten çok şaşırdım. Javascript'i işaret ediyor gibi görünüyor, ancak tarayıcı yazdırma diyaloğu basılı düğmesine basıldıktan sonra hatanın meydana geldiğini anlıyor. Window.print() işlevinin odaklanmış iframe'de çağrılmasından önce hatanın oluşmasını beklerim.

Bu hata bana biraz hayal kırıklığı verdiği için herhangi bir yardım büyük ölçüde takdir edilecektir.

Teşekkürler.

DÜZENLE----------------------------------------

Yukarıdaki standart jQuery yazdırma kitaplığını aşağıdaki gibi özel bir _getMarkup işleviyle kullanıyorum:

    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
"Kullanıcı" yazdırma "düğmesine bastığında IE kilitleniyor ve yalnızca işlemi sonlandırarak kapatılabilir." - Bu gerçekten bir OS problemi gibi görünüyor. Sorunu yeniden oluşturamazsanız veya incelemek için bazı kodlar sağlamazsanız, sorun giderme işaretçisi vermekten başka yapabileceğimiz bir şey yoktur ... o zaman konu dışıyız.
katma yazar Sparky, kaynak
Bu satırlar boyunca bir şeyler düşünüyordum, ama onlar sadece benim sayfama gidip "dosya -> baskı" yapabilmeleri ve iyi çalışabilmeleri bana JavaScript ya da baskı sürecim ile ilgili bir şeyler yapabileceğini düşünmemi sağlıyor. Kod incelemesi gelince, yukarıda belirtilen kütüphaneyi kullanıyorum. Yukarıdaki yazıya yaptığım değişikliklerin oldukça az olduğunu da ekledim. Ayrıca benim cephanemizi yıprattığımı düşündüğüm herhangi bir sorun giderme ipucuna da hoş geldiniz.
katma yazar Bryce, kaynak
İçeriğin JS'de oluşturulduğu bir sayfada benzer sorunlar yaşadım ve sayfada çoğu öğeyi gizleyen CSS vardı. Sayfa temelde farklı CSS ile normal bir sayfaydı. Normal sürüm işe yaradı, ancak yeni bir stil sayfası tanıtıldıktan sonra sorunlar başladı. En iyi tahminim, ağır CSS'nin gizlenmesi ve ağır JS (harita) oluşturma işleminin IE8'in işlemesi için çok fazla olmasıydı.
katma yazar Marcus, kaynak

Cevap yok

0