[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