| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899 | 
							- 'use strict';
 
- var random = require('../../utils/random')
 
-   , urlUtils = require('../../utils/url')
 
-   ;
 
- var debug = function() {};
 
- if (process.env.NODE_ENV !== 'production') {
 
-   debug = require('debug')('sockjs-client:sender:jsonp');
 
- }
 
- var form, area;
 
- function createIframe(id) {
 
-   debug('createIframe', id);
 
-   try {
 
-     // ie6 dynamic iframes with target="" support (thanks Chris Lambacher)
 
-     return global.document.createElement('<iframe name="' + id + '">');
 
-   } catch (x) {
 
-     var iframe = global.document.createElement('iframe');
 
-     iframe.name = id;
 
-     return iframe;
 
-   }
 
- }
 
- function createForm() {
 
-   debug('createForm');
 
-   form = global.document.createElement('form');
 
-   form.style.display = 'none';
 
-   form.style.position = 'absolute';
 
-   form.method = 'POST';
 
-   form.enctype = 'application/x-www-form-urlencoded';
 
-   form.acceptCharset = 'UTF-8';
 
-   area = global.document.createElement('textarea');
 
-   area.name = 'd';
 
-   form.appendChild(area);
 
-   global.document.body.appendChild(form);
 
- }
 
- module.exports = function(url, payload, callback) {
 
-   debug(url, payload);
 
-   if (!form) {
 
-     createForm();
 
-   }
 
-   var id = 'a' + random.string(8);
 
-   form.target = id;
 
-   form.action = urlUtils.addQuery(urlUtils.addPath(url, '/jsonp_send'), 'i=' + id);
 
-   var iframe = createIframe(id);
 
-   iframe.id = id;
 
-   iframe.style.display = 'none';
 
-   form.appendChild(iframe);
 
-   try {
 
-     area.value = payload;
 
-   } catch (e) {
 
-     // seriously broken browsers get here
 
-   }
 
-   form.submit();
 
-   var completed = function(err) {
 
-     debug('completed', id, err);
 
-     if (!iframe.onerror) {
 
-       return;
 
-     }
 
-     iframe.onreadystatechange = iframe.onerror = iframe.onload = null;
 
-     // Opera mini doesn't like if we GC iframe
 
-     // immediately, thus this timeout.
 
-     setTimeout(function() {
 
-       debug('cleaning up', id);
 
-       iframe.parentNode.removeChild(iframe);
 
-       iframe = null;
 
-     }, 500);
 
-     area.value = '';
 
-     // It is not possible to detect if the iframe succeeded or
 
-     // failed to submit our form.
 
-     callback(err);
 
-   };
 
-   iframe.onerror = function() {
 
-     debug('onerror', id);
 
-     completed();
 
-   };
 
-   iframe.onload = function() {
 
-     debug('onload', id);
 
-     completed();
 
-   };
 
-   iframe.onreadystatechange = function(e) {
 
-     debug('onreadystatechange', id, iframe.readyState, e);
 
-     if (iframe.readyState === 'complete') {
 
-       completed();
 
-     }
 
-   };
 
-   return function() {
 
-     debug('aborted', id);
 
-     completed(new Error('Aborted'));
 
-   };
 
- };
 
 
  |