Window.opener null on same domain in IE


I've researched this extensively (there are many similar questions) but I'm not finding the exact answer I'm looking for.

I am creating a single sign-on widget, so the user flow is as follows:

User clicks Login to open window (domain1) > Login flow (domain2) > Landing page (domain1)

Here is the code I'm using on the landing page:

<html> <head> <title>Redirect</title> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <script type="text/javascript"> if (window.opener && !window.opener.closed) { setTimeout(function(){ window.opener.location.href = "[some URL]"; window.close(); },2000); } </script> </head> <body>

Logging you in...

</body> </html>

The purpose of having the landing page at the end is so that I can eliminate cross-domain issues with accessing window.opener.

This works like a charm in all browsers except IE (gasp!). IE says window.opener is null, even though I have returned to my own domain.

Nothing I've read so far really solves this issue. I have to think there must be some way to do this, since so many sites are using FSSO. Unfortunately, it's not an option for us to find an alternative to a popup window.

Is this just impossible to do in IE due to browser-related security? The only other thing I can think of is to put some kind of listener on the parent to wait for the child to close. Ugh.


It seems the issue was related the security zones set on our corporate IE builds. The different domains were relegated to separate zones. Apparently IE loses the value of window.opener when passing through these zones and doesn't bother to reset it. When tested on an outside build of IE it worked.


  • Javascript snippet not working (missing lib?)
  • Jquery Google Maps V3 - Information window is always fixed to one marker
  • How to center a menu using flexbox [closed]
  • reduce/reduce conflicts using ocamlyacc
  • Embedding a Google map
  • jinja2 template not found and internal server error
  • How secure are apple APNS push notifications?
  • Why does the font in these TD elements render at different sizes?
  • Tell Git to stop prompting me for conflicts when none really exist?
  • How to have background script and something similar to a default popup?
  • How to attach a node.js readable stream to a Sendgrid email?
  • Listbox within Listbox and scrolling trouble in Windows Phone 7 Silverlight
  • Jquery UI tool tip close icon
  • Display issues when we change from one jquery mobile page to another in firefox
  • Align navbar back button on right side
  • DotNetZip - Calculate final zip size before calling Save(stream)
  • MySQL WHERE-condition in procedure ignored
  • Symfony2: How to get request parameter
  • Weird JavaScript statement, what does it mean?
  • jquery mobile loadPage not working
  • Web-crawler for facebook in python
  • Warning: Can't call setState (or forceUpdate) on an unmounted component
  • bootstrap to use multiple ng-app
  • How to get icons for entities from eclipse?
  • trying to dynamically update Highchart column chart but series undefined
  • Proper way to use connect-multiparty with express.js?
  • Load html files in TinyMce
  • How can I get HTML syntax highlighting in my editor for CakePHP?
  • Free memory of cv::Mat loaded using FileStorage API
  • How do I configure my settings file to work with unit tests?
  • Turn off referential integrity in Derby? is it possible?
  • How to get Windows thread pool to call class member function?
  • IndexOutOfRangeException on multidimensional array despite using GetLength check
  • JaxB to read class hierarchy
  • costura.fody for a dll that references another dll
  • Binding checkboxes to object values in AngularJs
  • Observable and ngFor in Angular 2
  • How to Embed XSL into XML
  • UserPrincipal.Current returns apppool on IIS
  • java string with new operator and a literal