Я работаю над этой проблемой уже пару недель и не могу ее решить.О проблеме сообщает только небольшое подмножество пользователей IE8.Я попытался воспроизвести проблему, запустив виртуальную машину Windows XP, IE8 (отчет пользователей той же версии) и синхронизировав настройки безопасности браузера.Несмотря на это, я не могу воспроизвести проблему для себя.Воспроизведение было бы замечательно, но в конечном итоге все, что имеет значение, - это найти источник проблемы.
Способ работы функции печати таков:
- Пользователь нажимает ссылку на странице, котораязапускает функцию javascript.
- javascript выполняет некоторую логику для получения содержимого подраздела страницы (в зависимости от того, какая ссылка печати была нажата).
- "Для элементов 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('');
};