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.
|
|
'use strict';
var inherits = require('inherits') , iframeUtils = require('../../utils/iframe') , urlUtils = require('../../utils/url') , EventEmitter = require('events').EventEmitter , random = require('../../utils/random') ;
var debug = function() {}; if (process.env.NODE_ENV !== 'production') { debug = require('debug')('sockjs-client:receiver:htmlfile'); }
function HtmlfileReceiver(url) { debug(url); EventEmitter.call(this); var self = this; iframeUtils.polluteGlobalNamespace();
this.id = 'a' + random.string(6); url = urlUtils.addQuery(url, 'c=' + decodeURIComponent(iframeUtils.WPrefix + '.' + this.id));
debug('using htmlfile', HtmlfileReceiver.htmlfileEnabled); var constructFunc = HtmlfileReceiver.htmlfileEnabled ? iframeUtils.createHtmlfile : iframeUtils.createIframe;
global[iframeUtils.WPrefix][this.id] = { start: function() { debug('start'); self.iframeObj.loaded(); } , message: function(data) { debug('message', data); self.emit('message', data); } , stop: function() { debug('stop'); self._cleanup(); self._close('network'); } }; this.iframeObj = constructFunc(url, function() { debug('callback'); self._cleanup(); self._close('permanent'); }); }
inherits(HtmlfileReceiver, EventEmitter);
HtmlfileReceiver.prototype.abort = function() { debug('abort'); this._cleanup(); this._close('user'); };
HtmlfileReceiver.prototype._cleanup = function() { debug('_cleanup'); if (this.iframeObj) { this.iframeObj.cleanup(); this.iframeObj = null; } delete global[iframeUtils.WPrefix][this.id]; };
HtmlfileReceiver.prototype._close = function(reason) { debug('_close', reason); this.emit('close', null, reason); this.removeAllListeners(); };
HtmlfileReceiver.htmlfileEnabled = false;
// obfuscate to avoid firewalls
var axo = ['Active'].concat('Object').join('X'); if (axo in global) { try { HtmlfileReceiver.htmlfileEnabled = !!new global[axo]('htmlfile'); } catch (x) { // intentionally empty
} }
HtmlfileReceiver.enabled = HtmlfileReceiver.htmlfileEnabled || iframeUtils.iframeEnabled;
module.exports = HtmlfileReceiver;
|