توقف IE8 بعد الضغط على زر "طباعة" في حوار طباعة المستعرض عند تقديم محتوى تم تجميعه مع javascript عبر iframe

لقد كنت أعمل على هذه المشكلة منذ بضعة أسابيع ولم أتمكن من حلها. يتم الإبلاغ عن المشكلة فقط من قبل مجموعة فرعية صغيرة من مستخدمي IE8. لقد حاولت إعادة إنشاء المشكلة عن طريق تشغيل VM من windows xp و IE8 (نفس تقرير مستخدمي الإصدار) وإعدادات أمان المستعرض المتزامنة. على الرغم من ذلك ، لا أستطيع إعادة إنتاج المشكلة بنفسي. إن إعادة إنتاجه سيكون أمراً عظيماً ، لكن في نهاية المطاف كل ما يهم هو اكتشاف مصدر المشكلة.

الطريقة التي تعمل بها وظيفة الطباعة هي:

  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/

ثم تتم مطالبة المستخدم بحوار طباعة من IE. عندما يقوم المستخدم يضرب زر "الطباعة" IE توقف ويمكن فقط أن يتم إيقاف التشغيل عن طريق إنهاء العملية. إذا كان المستخدم يضرب "إلغاء" IE لا يتعطل ويمكن للمستخدم الاستمرار في أعمالهم.

يمكن للمستخدم استخدام وظيفة الطباعة الافتراضية لطباعة الصفحة بالكامل دون حدوث أي مشاكل. يحدث ذلك فقط عندما يستخدمون وظيفة الطباعة المستندة إلى JavaScript التي يقوم المتصفح بتعليقها.

لقد قمت بتشغيل المستخدم بدون إضافة IE8 ، ابحث في سجل أحداث windows الخاص به ، وقم بتعطيل بعض ميزات المشاكل الشائعة في IE8.

أنا حقا متعكز إلى أين قد يحدث هذا الخطأ في هذه العملية. يبدو أنه يشير إلى JavaScript الخاص بي لكنه يقطع لي أن الخطأ يحدث بعد الضغط على زر الطباعة الحوار طباعة المستعرض. أتوقع حدوث الخطأ قبل استدعاء الدالة window.print على iframe المركزة.

أي مساعدة سيكون موضع تقدير كبير حيث أن هذا الخطأ قد أعطاني الكثير من الإحباط.

شكر.

تصحيح----------------------------------------

أستخدم مكتبة طباعة 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('');
    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
"عندما يقوم المستخدم بالضغط على الزر" طباعة "، يتم تعليق IE ويمكن إيقاف تشغيله فقط بإنهاء العملية." - يبدو أن هذا في الواقع مشكلة في نظام التشغيل. وإذا لم تتمكن من إعادة إظهار المشكلة أو تقديم بعض التعليمات البرمجية لمراجعتها ، فليس هناك الكثير مما يمكننا فعله بخلاف منحك مؤشرات لتحري الخلل وإصلاحه ... ثم إننا خارج الموضوع.
وأضاف المؤلف Sparky, مصدر
كنت أفكر بشيء على هذا المنوال ، لكن حقيقة أنه يمكنهم فقط الانتقال إلى صفحتي والذهاب إلى "ملف -> طباعة" وأنه يعمل بشكل جيد يجعلني أعتقد أنه له علاقة بالـ JavaScript أو عملية الطباعة الخاصة بي. بقدر ما يذهب مراجعة التعليمات البرمجية ، أستخدم المكتبة المذكورة أعلاه. لقد أضفت أيضًا التعديلات التي أجريتها على المشاركة الواردة أعلاه والتي تكون ضئيلة جدًا. كما أرحب بأي من نصائح استكشاف الأخطاء وإصلاحها كما أشعر بأنني قد تآكلت ترسانتي.
وأضاف المؤلف Bryce, مصدر
واجهت مشكلات مشابهة مع صفحة تم فيها عرض المحتوى في JS ، وكان بها CSS الذي أخفى معظم العناصر على الصفحة. كانت الصفحة اساسا صفحة عادية مع CSS مختلفة. عملت النسخة العادية على ما يرام ، ولكن بمجرد إدخال ورقة الأنماط الجديدة ، بدأت المشاكل. لذا كان أفضل تخميني هو أن إنشاء مخطط جافا سكريبت للخدمة الشاقة الثقيلة (خريطة) الثقيل كان كثيرًا جدًا للتعامل مع IE8.
وأضاف المؤلف Marcus, مصدر