当通过iframe呈现使用javascript汇编的内容时,IE8在浏览器打印对话框中按下“打印”按钮后挂起

时间:2011-10-27 18:01:39

标签: javascript jquery iframe printing internet-explorer-8

我已经在这个问题上工作了几个星期,现在无法解决它。该问题仅由一小部分IE8用户报告。我试图通过运行Windows xp,IE8(相同版本用户报告)的VM以及同步的浏览器安全设置来重现该问题。尽管如此,我无法为自己重现这个问题。重现它会很棒,但最重要的是发现问题的根源。

打印功能的工作方式是:

  1. 用户按下页面上的一个链接,触发javascript功能。
  2. javascript执行一些逻辑来获取页面子部分的内容(基于点击的打印链接)。
  3. “exCanvas元素设置为display:none”因为我发现它们导致了打印错误。 4.使用稍微修改过的“打印元素”版本打印元素:http://projects.erikzaadi.com/jQueryPlugins/jQuery.printElement/
  4. 然后用IE提示用户打印对话框。当用户点击“打印”按钮时,IE挂起并且只能通过结束该过程来关闭。如果用户点击“取消”,则IE不会挂起,用户可以继续他们的业务。

    用户可以使用默认打印功能无问题地打印整个页面。只有当他们使用我的基于javascript的打印功能时,浏览器才会挂起。

    我让用户运行no-addon IE8,查看他们的Windows事件日志,并禁用IE8中的一些常见问题功能。

    我真的很难过这个错误可能发生在哪个过程中。它似乎指向我的JavaScript,但它让我觉得按下浏览器打印对话框打印按钮后发生错误。我希望在重点iframe上调用window.print()函数之前发生错误。

    任何帮助都会非常感激,因为这个错误让我感到非常沮丧。

    感谢。

    EDIT ----------------------------------------

    我使用上面的标准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('');
    };
    

0 个答案:

没有答案