我需要在子窗口中访问JavaScript对象,这是我的代码:
var bw = window.open("broadcast.html",'broadcast');
然后我正在访问JS对象:
bw.childObj.f();
问题是,JavaScript可能在子窗口中评估时间过长,childObj
有时无法在window.open
之后访问onload
。即使我将其放入$(bw).on('load', function() {
bw.childObj.f();
}
:
childObj
10次setTimeout(function() {
bw.childObj.f();
}, 3000);
中的5次是未定义的。但是,当我这样做时:
{{1}}
我总是得到一个结果,但当然,这不是正确的确定性解决方案。
如何同步执行此操作?
答案 0 :(得分:0)
您可以尝试收听load
或DOMContentLoaded
事件:
var bw = window.open("broadcast.html",'broadcast');
bw.addEventListener('load', function(){
bw.childObj.f();
});
答案 1 :(得分:0)
这是诀窍。
在broadcast.html
中,附加window.onload
这样的事件
window.onload = function () {
/* `fn` is not defined in `broadcast.html`, it's defined
in another html/js file */
fn(childObj);
}
在你的另一个html / js文件中:
var bw = window.open("broadcast.html",'broadcast');
/* we add `fn` function to `bw` object */
bw.fn = function (obj) { obj.f(); }