将父级重定向作为子窗口关闭,而不向子级添加代码

时间:2014-08-19 19:56:30

标签: javascript

好吧,我正在开发一个显示第三方开发课程的网站,所以我根本无法在实际的弹出窗口中更改任何内容,重定向调用必须来自父窗口。 parent,child和redirectLocation都在同一台服务器上,因此不应该是一个问题。这是我想要的代码。

    var new_window = window.open('courseAddress.php')

    new_window.onbeforeunload = function(){
        popupClosing(); 
    }

    function popupClosing(){
        window.location ="redirectLocation.php";
        alert('The popup has closed!');
        return false;
    };

警报正在触发,但父窗口似乎没有刷新。如果我将window.location ="redirectLocation.php";放在.onbeforeunload之外,那么刷新就可以了。

我确信我错过了一些简单的事情。先感谢您。我在这里已经阅读了这样的另一个问题,但他们能够使用孩子的window.opener.loaction,遗憾的是我无法做到。

我找到了一种有效的方法,buuuuuuuut它真的很讨厌。我只是让父窗口继续检查子窗口是否在那里。这是它的小提琴:http://jsfiddle.net/ex9e7uLq/

感谢折衷主义者也坚持使用这个!

2 个答案:

答案 0 :(得分:1)

我已经在Chrome,Firefox和IE上测试了这一切,没有任何问题。这是一个example JSBin

var win = window.open("http://www.google.com");

var winClosed = setInterval(function () {

    if (win.closed) {
        clearInterval(winClosed);
        location.assign("http://www.bing.com/");
    }

}, 250);

根据您的问题,我知道您想要将事件处理程序附加到子窗口。然而,在测试不同方法的同时,我遇到了大量问题。通常,Internet Explorer无法在父窗口中注册子窗口中的任何事件。只要子窗口启动,Firefox和Chrome就会像触发事件一样(无论类型如何)。

我已经阅读了其他SO问题的答案显然可以通过做你想做的事情,但个人无法让他们工作。祝你好运:)

答案 1 :(得分:0)

试试这个:

var new_window = window.open('courseAddress.php');

var intr = setInterval(function(){
  console.log(new_window.closed);
  if(new_window.closed){
    clearInterval(intr);
    window.location='http://www.google.com';
  }
}, 200);