You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							69 lines
						
					
					
						
							1.5 KiB
						
					
					
				
			
		
		
	
	
							69 lines
						
					
					
						
							1.5 KiB
						
					
					
				'use strict'; | 
						|
 | 
						|
var EventEmitter = require('events').EventEmitter | 
						|
  , inherits = require('inherits') | 
						|
  , JSON3 = require('json3') | 
						|
  , utils = require('./utils/event') | 
						|
  , IframeTransport = require('./transport/iframe') | 
						|
  , InfoReceiverIframe = require('./info-iframe-receiver') | 
						|
  ; | 
						|
 | 
						|
var debug = function() {}; | 
						|
if (process.env.NODE_ENV !== 'production') { | 
						|
  debug = require('debug')('sockjs-client:info-iframe'); | 
						|
} | 
						|
 | 
						|
function InfoIframe(baseUrl, url) { | 
						|
  var self = this; | 
						|
  EventEmitter.call(this); | 
						|
 | 
						|
  var go = function() { | 
						|
    var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl); | 
						|
 | 
						|
    ifr.once('message', function(msg) { | 
						|
      if (msg) { | 
						|
        var d; | 
						|
        try { | 
						|
          d = JSON3.parse(msg); | 
						|
        } catch (e) { | 
						|
          debug('bad json', msg); | 
						|
          self.emit('finish'); | 
						|
          self.close(); | 
						|
          return; | 
						|
        } | 
						|
 | 
						|
        var info = d[0], rtt = d[1]; | 
						|
        self.emit('finish', info, rtt); | 
						|
      } | 
						|
      self.close(); | 
						|
    }); | 
						|
 | 
						|
    ifr.once('close', function() { | 
						|
      self.emit('finish'); | 
						|
      self.close(); | 
						|
    }); | 
						|
  }; | 
						|
 | 
						|
  // TODO this seems the same as the 'needBody' from transports | 
						|
  if (!global.document.body) { | 
						|
    utils.attachEvent('load', go); | 
						|
  } else { | 
						|
    go(); | 
						|
  } | 
						|
} | 
						|
 | 
						|
inherits(InfoIframe, EventEmitter); | 
						|
 | 
						|
InfoIframe.enabled = function() { | 
						|
  return IframeTransport.enabled(); | 
						|
}; | 
						|
 | 
						|
InfoIframe.prototype.close = function() { | 
						|
  if (this.ifr) { | 
						|
    this.ifr.close(); | 
						|
  } | 
						|
  this.removeAllListeners(); | 
						|
  this.ifr = null; | 
						|
}; | 
						|
 | 
						|
module.exports = InfoIframe;
 | 
						|
 |