1 | 'use strict';
|
---|
2 |
|
---|
3 | var EventEmitter = require('events').EventEmitter
|
---|
4 | , inherits = require('inherits')
|
---|
5 | , JSON3 = require('json3')
|
---|
6 | , utils = require('./utils/event')
|
---|
7 | , IframeTransport = require('./transport/iframe')
|
---|
8 | , InfoReceiverIframe = require('./info-iframe-receiver')
|
---|
9 | ;
|
---|
10 |
|
---|
11 | var debug = function() {};
|
---|
12 | if (process.env.NODE_ENV !== 'production') {
|
---|
13 | debug = require('debug')('sockjs-client:info-iframe');
|
---|
14 | }
|
---|
15 |
|
---|
16 | function InfoIframe(baseUrl, url) {
|
---|
17 | var self = this;
|
---|
18 | EventEmitter.call(this);
|
---|
19 |
|
---|
20 | var go = function() {
|
---|
21 | var ifr = self.ifr = new IframeTransport(InfoReceiverIframe.transportName, url, baseUrl);
|
---|
22 |
|
---|
23 | ifr.once('message', function(msg) {
|
---|
24 | if (msg) {
|
---|
25 | var d;
|
---|
26 | try {
|
---|
27 | d = JSON3.parse(msg);
|
---|
28 | } catch (e) {
|
---|
29 | debug('bad json', msg);
|
---|
30 | self.emit('finish');
|
---|
31 | self.close();
|
---|
32 | return;
|
---|
33 | }
|
---|
34 |
|
---|
35 | var info = d[0], rtt = d[1];
|
---|
36 | self.emit('finish', info, rtt);
|
---|
37 | }
|
---|
38 | self.close();
|
---|
39 | });
|
---|
40 |
|
---|
41 | ifr.once('close', function() {
|
---|
42 | self.emit('finish');
|
---|
43 | self.close();
|
---|
44 | });
|
---|
45 | };
|
---|
46 |
|
---|
47 | // TODO this seems the same as the 'needBody' from transports
|
---|
48 | if (!global.document.body) {
|
---|
49 | utils.attachEvent('load', go);
|
---|
50 | } else {
|
---|
51 | go();
|
---|
52 | }
|
---|
53 | }
|
---|
54 |
|
---|
55 | inherits(InfoIframe, EventEmitter);
|
---|
56 |
|
---|
57 | InfoIframe.enabled = function() {
|
---|
58 | return IframeTransport.enabled();
|
---|
59 | };
|
---|
60 |
|
---|
61 | InfoIframe.prototype.close = function() {
|
---|
62 | if (this.ifr) {
|
---|
63 | this.ifr.close();
|
---|
64 | }
|
---|
65 | this.removeAllListeners();
|
---|
66 | this.ifr = null;
|
---|
67 | };
|
---|
68 |
|
---|
69 | module.exports = InfoIframe;
|
---|