IE8は、iframeを介してjavascriptで組み立てられたコンテンツをレンダリングするときに、ブラウザの印刷ダイアログで「印刷」ボタンを押した後にハングします

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

印刷機能の仕組みは次のとおりです。

  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/

その後、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("

"+$(".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がハングアップし、プロセスを終了することによってのみシャットダウンできます。 " - これはOSの問題のようです。また、問題を再現できない場合や、レビューするためのコードを提供できない場合は、ポインタのトラブルシューティング以外に行うことはほとんどありません。
追加された 著者 Sparky,
私はそれらの行に沿って何かを考えていましたが、彼らは単に私のページに行き、 "ファイル - >プリント"に行くことができ、それはうまく動作して、それはジャバスクリプトまたは私の印刷プロセスと関係があると思います。コードレビューが行われる限り、私は上記のライブラリを使用します。私はまた、上記の投稿に加えた変更をかなり最小限にしました。私は自分の武器を消耗していると感じるので、トラブルシューティングのヒントも歓迎します。
追加された 著者 Bryce,
私は、コンテンツがJSでレンダリングされたページで同様の問題を抱えていました。そして、CSSがページのほとんどの要素を隠していました。ページは基本的に異なるCSSを持つ通常のページでした。通常のバージョンはうまくいきましたが、新しいスタイルシートが導入されると、問題が始まりました。だから、私の最高の推測では、重いCSSの隠れている&重いJS(地図)レンダリングは、IE8が扱うにはあまりにも多かったということでした。
追加された 著者 Marcus,

答えはありません

0
JavaScript - 日本のコミュニティ
JavaScript - 日本のコミュニティ
2 参加者の

日本人コミュニティのjavascript