From 32da69983021005567a4d8f56a2658ac2645780c Mon Sep 17 00:00:00 2001 From: Aleksander Machniak Date: Fri, 8 Mar 2013 08:49:57 +0100 Subject: Fix javascript errors when working in a page opened with taget="_blank" --- CHANGELOG | 1 + program/js/app.js | 20 ++++++++++++++++---- skins/larry/ui.js | 3 ++- 3 files changed, 19 insertions(+), 5 deletions(-) diff --git a/CHANGELOG b/CHANGELOG index 2fb870f92..062313ee1 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,6 +1,7 @@ CHANGELOG Roundcube Webmail =========================== +- Fix javascript errors when working in a page opened with taget="_blank" - Mention SQLite database format change in UPGRADING file (#1488983) - Increase maxlength to 254 chars for email input fields in addressbook (#1488987) - Add attachment menu with Open and Download options (#1488975) diff --git a/program/js/app.js b/program/js/app.js index 55c71d776..c2a7c1b79 100644 --- a/program/js/app.js +++ b/program/js/app.js @@ -2984,10 +2984,10 @@ function rcube_webmail() input_message = $("[name='_message']").get(0), html_mode = $("input[name='_is_html']").val() == '1', ac_fields = ['cc', 'bcc', 'replyto', 'followupto'], - ac_props; + ac_props, opener_rc = this.opener(); // close compose step in opener - if (window.opener && !window.opener.closed && opener.rcmail && opener.rcmail.env.action == 'compose') { + if (opener_rc && opener_rc.env.action == 'compose') { setTimeout(function(){ opener.history.back(); }, 100); this.env.opened_extwin = true; } @@ -3666,9 +3666,10 @@ function rcube_webmail() this.display_message(msg, type); if (this.env.extwin) { + var opener_rc = this.opener(); this.lock_form(this.gui_objects.messageform); - if (window.opener && !window.opener.closed && opener.rcmail) - opener.rcmail.display_message(msg, type); + if (opener_rc) + opener_rc.display_message(msg, type); setTimeout(function(){ window.close() }, 1000); } else { @@ -6500,6 +6501,17 @@ function rcube_webmail() /********* helper methods *********/ /********************************************************/ + // get window.opener.rcmail if available + this.opener = function() + { + // catch Error: Permission denied to access property rcmail + try { + if (window.opener && !opener.closed && opener.rcmail) + return opener.rcmail; + } + catch (e) {} + }; + // check if we're in show mode or if we have a unique selection // and return the message uid this.get_single_uid = function() diff --git a/skins/larry/ui.js b/skins/larry/ui.js index 6b2a5c7d0..b787dbb8d 100644 --- a/skins/larry/ui.js +++ b/skins/larry/ui.js @@ -123,7 +123,8 @@ function rcube_mail_ui() }).css('cursor', 'pointer'); // toggle compose options if opened in new window and they were visible before - if (window.opener && opener.rcmail && opener.rcmail.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) + var opener_rc = rcmail.opener(); + if (opener_rc && opener_rc.env.action == 'compose' && $('#composeoptionstoggle', opener.document).hasClass('remove')) $('#composeoptionstoggle').click(); new rcube_splitter({ id:'composesplitterv', p1:'#composeview-left', p2:'#composeview-right', -- cgit v1.2.3