是否可以从父窗口绑定到子窗口上的事件?

时间:2015-02-16 13:19:07

标签: javascript dom asp.net-web-api

是否可以将函数绑定到子窗口上的事件?

document.getElementById('foo').onclick = function() {
    var newWindow= window.open('other.html', "_blank");
    newWindow.document.addEventListener("onreadystatechange", function(){
      console.log('foo'); // This is never run. Can I construct the new window so that it is run "onreadystatechange"?
    });

    return false;   
};

请注意,我想将事件绑定到onreadystatechange。我希望避免竞争条件,我可以创建一个窗口,绑定事件然后加载URL以避免竞争条件吗?

2 个答案:

答案 0 :(得分:2)

如果你这样做应该很好。

var newwindow = window.open('other.html', "_blank");
var $ = newwindow.$; // add if needed
$(newwindow).bind('someEvent', function() { FunctionThatDoesSomethingInTheNewWindow });
return false;

答案 1 :(得分:2)

.addEventListener("onreadystatechange", ...)

事件属性以" on"开头。另一方面,事件名称不会。即它应该是

.addEventListener("readystatechange", ...)

  

我没有尝试避免竞争条件,因为我知道无法这样做。

好的,我不完全确定事件和辅助浏览上下文初始化如何与window.open()一起使用,那里的规范非常复杂。 我只是尝试设置DOM事件断点(chrome调试器有那些),看看哪个事件以哪个顺序触发,然后检查它是否适用于其他浏览器。

那就是说,我认为这里最简单的选择可能是阅读document.readyState属性。如果它完成"然后该网站已经完全加载,并且不会再触发任何状态更改事件,您可以直接执行脚本而不是等待事件。