Index: branches/RC/core/admin_templates/incs/close_popup.tpl =================================================================== diff -u -r11368 -r11482 --- branches/RC/core/admin_templates/incs/close_popup.tpl (.../close_popup.tpl) (revision 11368) +++ branches/RC/core/admin_templates/incs/close_popup.tpl (.../close_popup.tpl) (revision 11482) @@ -22,32 +22,76 @@ } function proceed_redirect() { - if (window.opener) { + var $opener = getFrame('main').getWindowOpener(window); + + if ($opener) { // using popups & close_popup called (from anywhere) try { - // parent window is ours - - var $skip_refresh = true; - - var $skip_refresh = isset(window.opener.$skip_refresh) && window.opener.$skip_refresh ? true : false; - - - if (!$skip_refresh) { - window.opener.location.href = $redirect_url.replace('%5C', '\\'); - } - window.close(); - window.opener.focus(); + window_close( function() { onAfterWindowClose($opener); } ); } catch (err) { // another website is opened in parent window - alert('Error while trying to process redirect in window opener, you should probably close this window. Error message: [' + err.description + ']'); + alert('Error while trying to process redirect in window opener, you should probably close this window.' + "\n" + 'Error message: [' + err.message + ']'); } } else if (!$use_popups) { // not using popups (for editing), but close_popup called (e.g. from selector) window.location.href = $redirect_url.replace('%5C', '\\'); } } + + function onAfterWindowClose($opener) { + + var $skip_refresh = true; + + var $skip_refresh = isset($opener.$skip_refresh) && $opener.$skip_refresh ? true : false; + + + $opener.focus(); + + if (!$skip_refresh) { + $opener.location.href = $redirect_url.replace('%5C', '\\'); + } + } + + // copied from "js/script.js" because it's not included here due performance reasons + function getFrame($name) { + var $main_window = window; + + // 1. cycle through popups to get main window + try { + // will be error, when other site is opened in parent window + while ($main_window.opener) { + $main_window = $main_window.opener; + } + } + catch (err) { + // catch Access/Permission Denied error + // alert('getFrame.Error: [' + err.description + ']'); + return window; + } + + var $frameset = $main_window.parent.frames; + for ($i = 0; $i < $frameset.length; $i++) { + if ($frameset[$i].name == $name) { + return $frameset[$i]; + } + } + return $main_window.parent; + } + + function window_close($close_callback) { + // use this instead of "window.close();" + if (window.name == 'main') { + return ; + } + + if ($close_callback !== undefined) { + return getFrame('main').TB.remove(null, $close_callback); + } + + return getFrame('main').TB.remove(); + }