Javascript 在IE6中为新打开的窗口设置OnLoad事件
我需要为新弹出的窗口设置onload属性。 以下代码适用于Firefox: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或未定义” 目标是弹
<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是未定义的。有什么想法吗?