在IE6中为新打开的窗口设置OnLoad事件

时间:2008-10-28 22:31:07

标签: javascript internet-explorer onload

我需要为新弹出的窗口设置onload属性。 以下代码适用于Firefox:

<a onclick="printwindow=window.open('www.google.com');printwindow.document.body.onload=self.print();return false;" href='www.google.com'>

然而,当我在IE中尝试这个时,我收到一个错误 - “printwindow.document.body null或not defined'

目标是弹出一个新窗口,并在打开该窗口时调出该窗口的打印对话框。

有关如何使这项工作的任何线索? 重要的是不要在目标页面上的其他地方使用javascript,因为我无法控制它。所有功能必须包含在我上面发布的链接中。

6 个答案:

答案 0 :(得分:4)

虽然之前的答案正确地说明了新窗口必须来自同一个域,但他们错误地回答了为什么他收到错误'printwindow.document.body null或not defined'。这是因为IE不会从window.open()返回任何状态,这意味着您可以打开一个页面并尝试在onload可用之前访问它。

出于这个原因,你需要使用类似setTimeout的东西来检查。例如:

printwindow = window.open('print.html');
var body;
function ieLoaded(){
    body = printwindow.document.getElementsByTagName("body");
    if(body[0]==null){
        // Page isn't ready yet!
        setTimeout(ieLoaded, 10);
    }else{
        // Here you can inject javascript if you like
        var n = printwindow.document.createElement("script");
        n.src = "injectableScript.js";
        body.appendChild(n);

        // Or you can just call your script as originally planned
        printwindow.print();
    }
}
ieLoaded();

进一步讨论here

答案 1 :(得分:1)

除非两个页面位于同一个域中,否则这是不可能的。您的代码在FF中不起作用,而是打印当前页面。如果页面位于同一个域中,那么您可以写:

printwindow=window.open('/mypage.html');
printwindow.onload = function() {
  printwindow.focus();
  printwindow.print();
}

答案 2 :(得分:0)

您依赖“printwindow.document.body.onload = self.print();”在子文档完成加载之前执行的行。我认为你不能保证这一点。

这是一个想法:准备HTML或只包含iframe所需页面的页面。该页面将包含body.onload = self.print()。

答案 3 :(得分:0)

onload是一个属性,如果是窗口对象,而不是body元素,尽管HTML属性可能会让您相信。这是参考:

printwindow.onload

但是,在这种情况下,你不能传递一串JavaScript - 你需要把它交给一个函数。所以,完整的脚本就像这样

printwindow.onload=function(){self.print();}

现在,把它们放在一起

<a href="www.google.com" onclick="var printwindow=window.open(this.href,'printwindow');printwindow.onload=function(){self.print();};return false;" >try it</a>

无论其!这对于“www.google.com”网址不起作用。浏览器安全模型阻止父窗口访问子窗口的窗口对象,除非它们都驻留在相同的域名中。

答案 4 :(得分:0)

检查我们的jQuery。特别是文档就绪功能。

http://docs.jquery.com/Tutorials:How_jQuery_Works#Launching_Code_on_Document_Ready

答案 5 :(得分:-1)

适用于所有浏览器的最终(不可否认,差)解决方案是使用setTimeout并以这种方式调用print(),而不是修改onload属性:

<a onclick="self.printwindow=window.open('print.html');setTimeout('self.printwindow.print()',3000);return false;" href='print.html'>