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

Javascript 是否可以从父窗口绑定到子窗口上的事件?,javascript,dom,asp.net-web-api,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.

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

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以避免竞争条件吗?

如果这样做,应该很好

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

如果你这样做了,那就很好了

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

事件属性以“on”开头。另一方面,事件名称则不是。也就是说,它应该是

.addEventListener(“readystatechange”,…)

我没有试图避免比赛条件,因为我知道没有办法这样做

好的,我不完全确定事件和辅助浏览上下文初始化如何与window.open()一起工作,那里的规范相当复杂。 我只想尝试设置DOM事件断点(chrome调试器有这些断点),看看哪些事件是按什么顺序触发的,然后检查在其他浏览器中是否有效

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

.addEventListener(“onreadystatechange”,…)

事件属性以“on”开头。另一方面,事件名称则不是。也就是说,它应该是

.addEventListener(“readystatechange”,…)

我没有试图避免比赛条件,因为我知道没有办法这样做

好的,我不完全确定事件和辅助浏览上下文初始化如何与window.open()一起工作,那里的规范相当复杂。 我只想尝试设置DOM事件断点(chrome调试器有这些断点),看看哪些事件是按什么顺序触发的,然后检查在其他浏览器中是否有效


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

看起来您的答案是假设存在jquery,这在问题中没有提到,这与问题中的代码有何不同(除了使用JQuery)?看起来您的答案是假设存在JQuery,这在问题中没有提到。这与问题中的代码有什么不同(除了使用JQuery)?您不应该使用事件处理程序属性,如
。onclick=…
,而是使用
。addEventListener()
API“是否可能”,您尝试过吗?如果您遇到问题,则值得在问题中提及。我已尝试运行问题中的代码,但事件函数似乎未运行。我怀疑是因为它正在失去与
onreadystatechange
事件触发的竞争。我没有尝试避免竞争条件,因为我知道您不应该使用事件处理程序属性,如
。onclick=…
,而应使用
。addEventListener()
API“是否可能”,您尝试过吗?如果您遇到问题,则值得在问题中提及。我已尝试运行问题中的代码,但事件函数似乎未运行。我怀疑是因为它正在失去与
onreadystatechange
事件触发的竞争。我没有尝试避免竞争条件,因为我知道没有办法。我想提供从父窗口运行的脚本。你能想到我该怎么做吗?要么插入
标记,要么尝试
targetWindow.eval()
我想提供从父窗口运行的脚本。你能想到我该怎么做吗?要么插入
标记,要么尝试
targetWindow.eval()