关闭f5刷新的儿童窗口

时间:2015-11-04 14:04:30

标签: javascript

我有一段代码可以在外部窗口中启动另一个页面。

f5

我在整个应用程序生命周期中管理此窗口,论坛完成后,我的管理状态将关闭此窗口。

但是,我面临的问题是,如果用户点击window.open进行硬刷新,则在主页加载后窗口仍然打开。

起初我以为我可以覆盖f5来跟踪我的应用程序在全局变量中打开窗口的状态。但是,我忽略了这样一个事实:在window.open重置时,我的全局丢失了。

这似乎是一个简单的问题,但解决方案已经避开了我。无论如何在父母刷新时关闭ABAddressBookRef addressBook = ABAddressBookCreateWithOptions(NULL, error); CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(addressBook); // Started looping in allPeople... loopCount=> looping variable ABRecordRef person = CFArrayGetValueAtIndex(allPeople, loopCount) // Fetching the unique id to the contact CFIndex uniqueId = ABRecordGetRecordID(person); 打开的窗口?

3 个答案:

答案 0 :(得分:1)

var myOpenWindow = window.open(...);
window.onunload = function(){myOpenWindow.close()};

或更好

window.addEventListener('unload',function(){myOpenWindow.close()})

应该这样做。

MDN: WindowEventHandlers.onunload

答案 1 :(得分:0)

也许您可以使用DIV并将其放在屏幕中央。添加一些jQueryUI魔法,你不必担心弹出窗口或阻挡器或其他东西。

答案 2 :(得分:0)

您可以使用以下代码打开窗口:

当您重新加载父页面时,孩子将在加载父页面时更改myOpenWindow

父窗口:

function detectChild(child) {
    myOpenWindow = child;
    //opener.actionWhenOpen();
}

var myOpenWindow = window.open(...);

window.onunload = function() {
    if (myOpenWindow) {
        myOpenWindow.refreshParent();
    }
};

子窗口:

if (opener) {
    //opener.actionWhenOpen();
    opener.onunload = function() {
        if (opener && opener.myOpenWindow) {
            opener.myOpenWindow.refreshParent();
        }
    };
}

function refreshParent() {
    this.i = ((this.i) ? this.i : 0)+1;
    var i = this.i;
    setTimeout(function() {
        if (!opener) {
            return console.log("Opener closed.");
        } else if (opener.detectChild && !opener.myOpenWindow) {
            this.i = 0;
            opener.detectChild(window);
        } else if (i < 900) {
            console.log("Opener cheked("+i+").");
            refreshParent(i++);
        }
    }, 50);
}