Javascript window.open和print导致IE8挂起

时间:2011-08-02 21:44:22

标签: javascript jquery internet-explorer-8 window.open

我正在尝试使用window.open()来创建一个然后打印的弹出窗口,但是我遇到问题,IE8在弹出弹出窗口后挂起。


更详细信息:

在我的应用程序结束时,我正在尝试打印输出的信息,但我试图在该弹出窗口中包含单独的CSS,jQuery和Javascript。我认为正是这些外部链接导致IE8挂起,但我不确定。

我测试过的所有其他浏览器中都会弹出窗口,出现打印对话框并打印正常。

在IE8中,弹出窗口,显示内容并加载CSS,但不是Javascript。如果您尝试手动打印(Ctrl + P),则打印时不使用CSS。

我试过这里的例子: Script elements written with document.write in a window opened with window.open are not executed in IE8 on Windows 7


现场演示

如果您确实想要查看实时版本,请访问:http://roxulmaterialscalculator.com/ 如果您想要到达打印部分,则必须填写应用程序所需的信息。 (在第二步,只需要填写无线电输入。)

要查看完整的javascript:http://roxulmaterialscalculator.com/js/scripts.js,您可以在其中找到我尝试的其他方法。


代码

将元素传递给函数

$('#actionPrint').live('click', function(event){
    printElem('#rc');
}

弹出元素并打印出来。

function printElem(elem) {
    popup($j(elem).html());
}

 function popup(data) {
    var mywindow = window.open('', 'printSheet', 'height=500,width=800,scrollbars=1');
    mywindow.document.open();
    mywindow.document.write('<html><head><title>Roxul Insulation Calculator</title>');
    mywindow.document.write('</head><body>');
    mywindow.document.write('<div id="rc_logo"><img src="img/roxul-logo.png" alt="roxul-logo" /></div>');
    mywindow.document.write(data);
    mywindow.document.write('</body></html>');

    var c = mywindow.document.createElement("link");
        c.rel = "stylesheet";
        c.type = "text/css";
        c.href = "css/print.css";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(c);

    var s = mywindow.document.createElement("script");
        s.type = "text/javascript";
        s.src = "js/jquery-1.5.2.min.js";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(s);

    var s2 = mywindow.document.createElement("script");
        s2.type = "text/javascript";
        s2.src = "js/print.js";
        mywindow.document.getElementsByTagName("HEAD")[0].appendChild(s2);

    mywindow.print();
    return true;
 }

1 个答案:

答案 0 :(得分:5)

我已经解决了我自己的问题,所以希望回答一个人自己的问题并不是坏事。

我的错误是在我的功能结束时没有包含mywindow.document.close();。 现在看起来如下:

mywindow.print();
mywindow.document.close();
return true;

我与其中一位与我合作的开发人员进行了交谈,他说document.close()会释放要打印的资源。