Opened 12 years ago

Closed 12 years ago

#1660 closed defect (fixed)

Internet Explorer 9 won't open popup windows

Reported by: Nicklas Nordborg Owned by: everyone
Priority: critical Milestone: BASE 3.0.3
Component: web Version: 2.17.2
Keywords: Cc:

Description

Some times Internet Explorer 9 will not open popup windows. It was first discovered while trying to download a file but seems to be happening for other popup windows as well.

It's a bit hard to exactly describe how to trigger this since at first everything works normally and then it stops working. There is no error message that is visible for the user. Opening the developer tools (F12) and switching to the 'Console' tab it is possible to see an error message:

SCRIPT70: Permission denied

Once it has stopped working for a given popup window it will not start working again, but other popups may still work. There are some workarounds:

  • Closing the tab with BASE and then opening a new tab and logging into BASE seems to help for some time (until the problem appears again).
  • Adding the BASE site to the "Trusted sites" (Tools -> Internet options -> Security) list seems to prevent the problem from appearing in the first place.

Change History (3)

comment:1 by Nicklas Nordborg, 12 years ago

I have made some investigations now and my best guess is that some kind of cross-site scripting protection is kicking in. It's a bit hard to debug this since I have not been able to find any simple procedure to reproduce the problem. Sometimes it seems like adding debug code and messages makes the problem go away.

But I think the the problem is coming from code that was implemented to fix some other issues (#1363/#637 and #1032). Not calling the code that protects against those problems also seems to get rid of the IE9 problems, but we need the protection so I'll hope that it can be implemented differently.

  • #1363/#637: Each opened popup window is remembered so that we can warn the user if a second window is opened that might override an already open window. If both the old popup and the parent window that opened it has been closed, it seems like IE9 have problems with the check. Redirecting all popup opening calls to the top-window in the top-frameset seems to get rid of the problem.
  • #1032: This protects against too long URLs by opening a blank popup window and then using either location.href or a POST form to load the actual contents. It seems like the blank window sometimes get locked and it is not possible to set the location.href attribute. Always using a POST form seems to get rid of the problem (but we do not want to do that all the time!). Loading a non-blank URL first also seems to get rid of the problem.

comment:2 by Nicklas Nordborg, 12 years ago

(In [5947]) References #1660: Internet Explorer 9 won't open popup windows

I think this fixes the problems with IE9. I have not been able to see the issue after the changes. With the old code it usually possible to see the problem withing 5-10 clicks. The fixes include:

  • Always use the code in the top-level window (frameset) to open popup windows. This get rid of the closed-parent problem which seems to be a possible cause. But we still need to use the true parent window since a lot of popup windows uses the window.opener property to communicate values back and forth.

  • Check the URL length before opening a blank window. If the POST form is not needed we simply open the window with the correct URL to begin with. If a POST form is needed we open a window with a real URL referencing a blank window. This should hopefully get rid of cross-site-scripting issues.

  • Use exception handling when getting old popup window information. If we can't access the information the old popup is probably already closed and the code can at least continue and open a new popup.

comment:3 by Nicklas Nordborg, 12 years ago

Resolution: fixed
Status: newclosed
Note: See TracTickets for help on using tickets.