Javascript “将父对象重定向为子对象”窗口关闭,而不向子对象添加代码

Javascript “将父对象重定向为子对象”窗口关闭,而不向子对象添加代码,javascript,Javascript,好的,我在一个显示第三方开发课程的网站上工作,所以我根本不能在实际的弹出窗口中更改任何内容,重定向调用必须来自父窗口。父级、子级和重定向位置都在同一台服务器上,因此这不应该是一个问题。这是我想要的代码 var new_window = window.open('courseAddress.php') new_window.onbeforeunload = function(){ popupClosing(); } function popup

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

    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
,不幸的是,我无法做到这一点

我找到了一种有效的方法,但是真的很恶心。我只是让父窗口不断检查子窗口是否存在。这里是它的小提琴:


感谢折衷主义者在这个问题上也坚持我的观点

我已经在Chrome、Firefox和IE上测试过了,都没有问题。这是一个例子

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

我读过其他的SO问题,这些问题的答案显然是通过做你想做的事情而起作用的,但就我个人而言,却无法让它们起作用。祝你好运:)

试试这个:

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);

所以你只想刷新父窗口?您可以尝试
location.reload()
而不是
window.loaction=…
。好的,我需要将父窗口重定向到一个新位置。然而,有趣的是location.reload()似乎工作得很好,因此感谢您的建议。但是,我也需要重定向。所以,重新加载工作正常,但我尝试重定向的任何东西似乎都失败了。我使用的是平板自动取款机,所以我无法测试这个。我认为可能是
window
指的是当前打开的子窗口,因此您最初的重定向实际上是在关闭子页面时尝试重定向子页面。您可以创建一个全局变量来引用父窗口,也可以创建一个自定义事件。另外要尝试的是
location.replace()
。我已经尝试创建一个全局变量来使用。还是没什么。作为一个测试,我让它提醒它的位置,它是父窗口,而不是孩子的位置。我还尝试了location.replace(),得到了相同的结果。我感谢你在这方面的帮助。我只是不知道为什么它不起作用。请提供更多细节
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);