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();
+ }