是否可以从 parent 绑定到 child window 上的事件?

Is it possible to bind to events on a child window from a parent?

是否可以将函数绑定到 child windows 上的事件?

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。我想避免竞争条件,我可以创建一个 window,绑定事件然后加载 URL 来避免竞争条件吗?

如果你这样做应该很好。

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

.addEventListener("onreadystatechange", ...)

事件属性以 "on" 开头。另一方面,事件 names 没有。 IE。应该是

.addEventListener("readystatechange", ...)

I have not tried avoiding the race condition because I know of no way to do so.

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

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