私はこの問題を数週間働いており、解決できませんでした。この問題は、IE8ユーザーの小さなサブセットによってのみ報告されています。私はWindows XP、IE8(同じバージョンのユーザレポート)のVMを実行し、ブラウザのセキュリティ設定を同期させて問題を再現しようとしました。それにもかかわらず、私は自分自身で問題を再現することができません。それを再現することは素晴らしいことですが、最終的に問題の原因を発見することは重要です。
印刷機能の仕組みは次のとおりです。
- 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/
その後、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("
");
$(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('');
};