From 32da69983021005567a4d8f56a2658ac2645780c Mon Sep 17 00:00:00 2001
From: Aleksander Machniak <alec@alec.pl>
Date: Fri, 08 Mar 2013 02:49:57 -0500
Subject: [PATCH] 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 2fb870f..062313e 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 55c71d7..c2a7c1b 100644
--- a/program/js/app.js
+++ b/program/js/app.js
@@ -2984,10 +2984,10 @@
       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 @@
     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 @@
   /*********            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 6b2a5c7..b787dbb 100644
--- a/skins/larry/ui.js
+++ b/skins/larry/ui.js
@@ -123,7 +123,8 @@
         }).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',

--
Gitblit v1.9.1