1. 程式人生 > >window.opener引用為null的解決辦法

window.opener引用為null的解決辦法

function this 遍歷 fun eat 移除 當前 頂級 int

項目使用的是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的解決辦法