从父窗口调用子窗口的方法

这是一个BOM问题,我这里指的子窗口(child window)是指从一个窗口通过window.open或iframe技术所创建的window对象,当然,父窗口(parent window)就是创建子窗口的原始窗口。网上总是有许多介绍从子窗口调用父窗口的方法的文章,但没有讲如何从父窗口调用子窗口方法,这里晒一晒最近做项目摸索出的小窍门,看代码吧:

    var childWin, interval,
    callFunc = function(){
           if(childWin.childFunc){   //childFunc表示试图调用的存在于子窗口的函数
                childWin.childFunc();
                window.clearInterval(interval);
           }
       };
   interval =  window.setInterval(callFunc,300);
   childWin = window.open('some-url', 'some-windowname');

由于window.open是异步执行的,子页面的加载需要一定时间,也就是说childFunc并不是马上就会出现,所以做了一个300ms的轮循来检查childFunc的可用性。当然,由于安全因素,此方法只适用于两个页面主域相同的情况。