[Pkg-javascript-commits] [sockjs-client] 49/434: Opera mini needs to wait a while before we unlink iframe from jsonp sender.

Tonnerre Lombard tonnerre-guest at moszumanska.debian.org
Wed Jan 8 00:47:01 UTC 2014


This is an automated email from the git hooks/post-receive script.

tonnerre-guest pushed a commit to branch master
in repository sockjs-client.

commit 26f74fe71925417553c6d4cd0a22b136dd53bd6c
Author: Marek Majkowski <majek04 at gmail.com>
Date:   Wed Aug 3 18:58:19 2011 +0100

    Opera mini needs to wait a while before we unlink iframe from jsonp sender.
---
 lib/trans-jsonp-receiver.js |  5 ++++-
 lib/trans-jsonp-sender.js   | 16 ++++++++++------
 2 files changed, 14 insertions(+), 7 deletions(-)

diff --git a/lib/trans-jsonp-receiver.js b/lib/trans-jsonp-receiver.js
index 696ca91..1467590 100644
--- a/lib/trans-jsonp-receiver.js
+++ b/lib/trans-jsonp-receiver.js
@@ -21,6 +21,7 @@ var jsonPGenericReceiver = function(url, callback) {
             callback = null;
         }
     };
+
     script.id = 'a' + utils.random_string(8);
     script.src = url;
     script.type = 'text/javascript';
@@ -31,6 +32,7 @@ var jsonPGenericReceiver = function(url, callback) {
     script.onload = function(e) {
         close_script(utils.closeFrame(1006, "JSONP script loaded abnormally (onload)"));
     };
+
     script.onreadystatechange = function(e) {
         if (/loaded|closed/.test(script.readyState)) {
             if (script && script.htmlFor && script.onclick) {
@@ -68,12 +70,13 @@ var jsonPGenericReceiver = function(url, callback) {
         } else if (typeof _document.attachEvent === 'function') {
             // Opera, second sync script hack
             script2 = _document.createElement('script');
-            script2.text = "try{document.getElementById('"+script.id+"').onerror();}catch(x){};";
+            script2.text = "try{var a = document.getElementById('"+script.id+"'); if(a)a.onerror();}catch(x){};";
             script.async = script2.async = false;
         }
     } else {
         script.async = true;
     }
+
     // Fallback mostly for Konqueror - stupid timer, 5 seconds shall be plenty.
     tref = setTimeout(function() {
                           close_script(utils.closeFrame(1006, "JSONP script loaded abnormally (timeout)"));
diff --git a/lib/trans-jsonp-sender.js b/lib/trans-jsonp-sender.js
index 77c37a4..cee6b43 100644
--- a/lib/trans-jsonp-sender.js
+++ b/lib/trans-jsonp-sender.js
@@ -65,16 +65,20 @@ var jsonPGenericSender = function(url, payload, callback) {
     iframe.id = id;
     form.appendChild(iframe);
     iframe.style.display = 'none';
+
     area.value = payload;
     form.submit();
 
-    var completed = function() {
-        form.removeChild(iframe);
+    var completed = function(e) {
+        if (!iframe.onerror) return;
         iframe.onreadystatechange = iframe.onerror = iframe.onload = null;
-        iframe = undefined;
-        area.value = undefined;
-        form.target = undefined;
-        form.reset();
+        // Opera mini doesn't like if we GC iframe
+        // immediately, thus this timeout.
+        setTimeout(function() {
+                       iframe.parentNode.removeChild(iframe);
+                       iframe = null;
+                   }, 500);
+        area.value = null;
         callback();
     };
     iframe.onerror = iframe.onload = completed;

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-javascript/sockjs-client.git



More information about the Pkg-javascript-commits mailing list