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:
- User presses a link on the page which triggers a JavaScript function.
- The JavaScript performs some logic to get the content of a subsection of the page (based on which print link was clicked).
- "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("
");
$(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('');
};