IE8 agar iframe orqali javascript bilan biriktirilgan kontentni ko'rsatishda brauzerni bosib chiqarish muloqotida "chop etish" tugmasini bosgandan so'ng osadi

Men bu masala ustida bir necha hafta ishlayapman va uni hal qila olmadim. Muammo faqat IE8 foydalanuvchilari kichik bir kichik guruhi tomonidan bildirilgan. Windows XP, IE8 (bir xil versiya foydalanuvchilar hisoboti) va sinxronlangan brauzer xavfsizlik sozlamalari bilan VMni ishga tushirish orqali muammoni qayta yaratishga urindim. Shunga qaramay, men o'zim uchun bu muammoni qayta tiklay olmayman. Qayta takrorlash ajoyib bo'lardi, lekin oxir-oqibat bu muammoning manbaini kashf etadi.

Bosib chiqarish funktsiyasi qanday ishlashi:

  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/

So'ngra, foydalanuvchi IE dan bosib chiqarish suhbati bilan so'raladi. Foydalanuvchi chop etish tugmasini bosganida IE to'xtaydi va faqat jarayonni tugatib o'chirib qo'yish mumkin. Agar foydalanuvchi "bekor qilish" ga kelsa, IE to'xtatilmaydi va foydalanuvchi o'z ishlarini davom ettirishi mumkin.

Foydalanuvchining barcha sahifani muammosiz bosib chiqarish uchun asl nusha funksiyasidan foydalanishi mumkin. Ular faqat brauzerda osilgan javascript-asosidagi chop etish funktsiyasidan foydalanishgan.

Men foydalanuvchi no-addon IE8ni ishga tushirdim, ularning derazalaridagi voqea jurnalini ko'rib chiqdim va IE8da ba'zi umumiy muammolarni o'chirib qo'ydim.

Men, albatta, bu xato qayerda sodir bo'lishi mumkinligi haqida o'ylab qoldim. Bu mening javascriptimga ishora qiladi, lekin brauzerni bosib chiqarish dialogining bosib chiqarish tugmasi bosilgach, xatolik yuz beradi. Window.print() funktsiyasi odatiy iframe orqali chaqirilmasdan oldin xatolik yuz beradi.

Ushbu yordam menga juda ozgina umidsizlikni bergani uchun har qanday yordam juda katta minnatdor bo'lardi.

Rahmat.

EDIT ----------------------------------------

Yuqoridagi standart jQuery bosib chiqarish kutubxonasini quyida ko'rsatilganidek, bir oz maxsus _getMarkup funktsiyasidan foydalanaman:

    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 foydalanuvchining" bosib chiqarish "tugmasini bosganida to'xtaydi va jarayonni tugatish bilan faqat yopilishi mumkin." - Bu, albatta, OS muammosi kabi ko'rinadi. Va agar siz bu muammoni takrorlay olmaysiz yoki tekshirib chiqish uchun biror kodni taqdim qila olmasangiz, unda biz sizni tashvishlantiradigan ko'rsatgichlarni berishdan boshqa narsa qila olmaymiz ... biz bundan tashqari mavzu emas.
qo'shib qo'ydi muallif Sparky, manba
Men ushbu satrlarda bir narsani o'ylab yurardim, lekin ular faqatgina "mening faylimga - bosib chiqarish" ga borishi mumkin va u yaxshi ishlaydi, deb JavaScript yoki bosib chiqarish jarayoni bilan bog'liq narsalar bor deb o'ylayman. Kodni ko'rib chiqishda men yuqorida ko'rsatilgan kutubxonadan foydalanaman. Men yuqoridagi lavozimga kiritilgan o'zgarishlarni juda kam eklemiştim. Shuningdek, har qanday muammolarni bartaraf etish bo'yicha maslahatlarga rozi bo'lardim, chunki men o'zimning qurolimni eskirgan deb o'ylayman.
qo'shib qo'ydi muallif Bryce, manba
Menda JSda kontent yaratilgan sahifada o'xshash muammolar bor edi va sahifada eng ko'p elementlarni yashirgan CSS bor edi. Sahifa asosan turli CSS-larga ega oddiy sahifa edi. Oddiy versiya yaxshi ishladi, ammo yangi uslub sahifasi kiritilgach, muammo boshlandi. Shunday qilib, mening eng yaxshi taxminimcha og'ir CSS-ni yashirish va og'ir JS (map) renderlash IE8 uchun juda ko'p edi.
qo'shib qo'ydi muallif Marcus, manba

Javob yo'q

0
Javascript UZB
Javascript UZB
99 ishtirokchilar

@js_uzb @vuejs_uz @react_uz @nodejs_uz @angular_uz @ngTashkent @yiiframework_uz @laravel_uz @linux_uzbek @python_uz @swift_uzb —————— @uzdevgroup @UzGeeksGroup ——— @UzDev_Jobs @jobs_uzb