Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/409.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 在IE6中为新打开的窗口设置OnLoad事件_Javascript_Internet Explorer_Onload - Fatal编程技术网

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

Javascript 在IE6中为新打开的窗口设置OnLoad事件,javascript,internet-explorer,onload,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或未定义” 目标是弹

我需要为新弹出的窗口设置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或未定义”

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

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

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


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

如果是窗口对象,则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>


但是!这对URL“www.google.com”不起作用。浏览器安全模型阻止父窗口访问子窗口的窗口对象,除非它们都位于同一域名。

检查我们的jQuery。尤其是文档就绪功能


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

printwindow=window.open('/mypage.html');
printwindow.onload = function() {
  printwindow.focus();
  printwindow.print();
}
适用于所有浏览器的最后一个解决方案(诚然是糟糕的)是使用setTimeout并以这种方式调用print(),而不是修改onload属性:

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

虽然先前的回答正确地指出新窗口必须来自同一个域,但他们错误地回答了为什么他会出现错误“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();

这是进一步讨论的

感谢您简洁的回答。这适用于Firefox,但不幸的是不适用于IE或Safari。似乎printwindow.onload不是访问这些浏览器onload函数的正确方法。您还有其他建议吗?将jQuery添加到页面超出了此问题的范围。不幸的是,我所拥有的一切要使用的是这个链接。不过我理解你的观点。我试图执行“setTimeout('printwindow.print()',3000);但是,当我这样做时,它声称printwindow是未定义的。有什么想法吗?