|
|
- '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;
|