window.opener引用为null的解决办法

Posted keitsang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了window.opener引用为null的解决办法相关的知识,希望对你有一定的参考价值。

项目使用的是iframe来包含新打开的页面,在使用IE的时候,通过window.open打开子页面之后,在子页面是可以获取到打开窗口的父页面的引用,但是在使用firefox与chrome的时候,却无法获得。而且使用window.close也无法关闭弹窗。针对这2个问题,找到了以下的解决办法,有更好的解决办法:

一、解决window.opener返回结果为null的问题

1、通过interval,在父页面定时为子页面添加引用

var c_win = window.open(url, "pageName", "feathers");//参数根据API填写
var intervalTemp = setInterval(function () {//设置一个interval,每隔1s去执行一次,为子页面添加opener属性值,获取到子页面已经关闭,则清除interval
        if ("complete" == c_win .document.readyState) {
            c_win .opener = window;
        }
        if (c_win .closed) {
            clearInterval(intervalTemp);
        }
}, 1000)

2、为父页面window添加属性

这个方法就是为父页面添加一个属性,当子页面需要去获取父页面的引用时,只需要获取顶级窗口,遍历页面的所有iframe,获取到window.openPage为指定参数的window。在子页面关闭时需要清空属性。

window.open(url, "pageName", "feathers");//参数根据API填写
window.openPage = "thisIsOpener";

二、解决window.close失败的问题

在iframe中打开的窗口,在firefox与chrome中无法关闭,具体原因没有找到,后来直接使用移除DOM对象的方法来关闭窗口。步骤就是在顶级窗口中,获取当前窗口所在的DOM对象,移除此DOM对象即可。

以上是关于window.opener引用为null的解决办法的主要内容,如果未能解决你的问题,请参考以下文章

window.opener和window.open的使用

window.open('',_blank');window.opener=null;top.window.close()和 window.location.href='

求助:js,如何关闭IFRAME的父窗口

js window.open的页面里关闭当前窗口,刷新原来的窗口

Javascript中window.opener的一点小总结

怎样打开当前窗口的父窗口