70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			70 lines
		
	
	
		
			1.5 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| '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;
 |