Skip to content Skip to sidebar Skip to footer

Refresh The Parent Window From The Child Window In Javascript

I have looked for awhile and cannot find an answer that fits my needs. I have a page that pops a window (window.open), logs the user in (creates a cookie, set session) then redirec

Solution 1:

window.opener in the popup will refer to the window object of the opening window, so of course you should be able to call window.opener.location.reload();. Provided you don't run afoul of the Same Origin Policy, the popup window can call scripts and manipulate properties on the parent window object just like code in the parent can.

Here's a live example demonstrating the child calling back to a function on the parent, and also manipulating the parent directly. The full code for this is quoted below.

But that example didn't do exactly what you said, so I've done this one as well, which has the child refreshing the parent page via window.opener.location.reload().

Parent code of first live example:

<!DOCTYPE html><html><head><metacharset=utf-8 /><title>Parent Window</title><!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><style>article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
</style></head><body><inputtype='button'id='btnOpen'value='Open Window'><divid='display'></div></body><scripttype='text/javascript'>
  (function() {
    var btnOpen = document.getElementById('btnOpen');
    btnOpen.onclick = btnOpenClick;

    functionbtnOpenClick() {
      window.open('http://jsbin.com/ehupo4/2');
    }

    // Make the callback function available on our// `window` object. I'm doing this explicitly// here because I prefer to export any globals// I'm going to create explicitly, but if you// just declare a function in a script block// and *not* inside another function, that will// automatically become a property of `window`window.callback = childCallback;
    functionchildCallback() {
      document.getElementById('display').innerHTML =
          'Got callback from child window at ' + newDate();
    }
  })();
</script></html>

(You don't have to use a scoping function as I did above, but it's useful to keep your globals contained.)

Child code of first live example:

<!DOCTYPE html><html><head><metacharset=utf-8 /><title>Child Window</title><!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]--><style>article, aside, figure, footer, header, hgroup, 
  menu, nav, section { display: block; }
</style></head><body><p>I'm the child window</p></body><scripttype='text/javascript'>if (window.opener) {
    // Call the provided callbackwindow.opener.callback();

    // Do something directlyvar p = window.opener.document.createElement('p');
    p.innerHTML = "I was added by the child directly.";
    window.opener.document.body.appendChild(p);
  }
</script></html>

Solution 2:

window.parent.top.location = window.parent.top.location; (or something similiar to that will do it)

Solution 3:

If none of the other suggestions work (Remember to test in all major browsers), you can also try passing a reference of the parent window to the child window explicitly. Because window.open() should return a reference to the child window.. so you can do child = window.open() and then you can do something like child.myParent = window

Solution 4:

I had the same issue with submitting a form in a modal via ajax and need the page underneath (parent page) to reload. window.location.reload(); worked for me.

Post a Comment for "Refresh The Parent Window From The Child Window In Javascript"