IE8 зависает после нажатия кнопки «печать» в диалоге печати браузера при рендеринге контента, собранного с помощью JavaScript через iframe - PullRequest
1 голос
/ 27 октября 2011

Я работаю над этой проблемой уже пару недель и не могу ее решить.О проблеме сообщает только небольшое подмножество пользователей IE8.Я попытался воспроизвести проблему, запустив виртуальную машину Windows XP, IE8 (отчет пользователей той же версии) и синхронизировав настройки безопасности браузера.Несмотря на это, я не могу воспроизвести проблему для себя.Воспроизведение было бы замечательно, но в конечном итоге все, что имеет значение, - это найти источник проблемы.

Способ работы функции печати таков:

  1. Пользователь нажимает ссылку на странице, котораязапускает функцию javascript.
  2. javascript выполняет некоторую логику для получения содержимого подраздела страницы (в зависимости от того, какая ссылка печати была нажата).
  3. "Для элементов exCanvas задано отображение:нет ", потому что я обнаружил, что они вызвали ошибки печати.4. Элемент печатается с использованием слегка измененной версии «Элемент печати», найденной здесь: 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('<base href="' + _getBaseHref() + '" />');
    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("<hr/><h3 class='table-header'>"+$(".title",$(element).parent().parent().children(":first")).text() +"</h3>");
    $(contentStr).append('<div>' + elementHtml + '</div>');

    var refTable = "";
    var total = $(".show-tooltip-text, .hidden_report",contentStr).each(function(index){
        if(index == 0){
            refTable += "<h3>Reference Table</h3><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("<sup>*ref: #"+index+"</sup>");
            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('');
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...