1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65
|
/*
* ***** BEGIN LICENSE BLOCK *****
* Copyright (c) 2011-2012 VMware, Inc.
*
* For the license see COPYING.
* ***** END LICENSE BLOCK *****
*/
var _is_ie_htmlfile_capable;
var isIeHtmlfileCapable = function() {
if (_is_ie_htmlfile_capable === undefined) {
if ('ActiveXObject' in _window) {
try {
_is_ie_htmlfile_capable = !!new ActiveXObject('htmlfile');
} catch (x) {}
} else {
_is_ie_htmlfile_capable = false;
}
}
return _is_ie_htmlfile_capable;
};
var HtmlfileReceiver = function(url) {
var that = this;
utils.polluteGlobalNamespace();
that.id = 'a' + utils.random_string(6, 26);
url += ((url.indexOf('?') === -1) ? '?' : '&') +
'c=' + escape(WPrefix + '.' + that.id);
var constructor = isIeHtmlfileCapable() ?
utils.createHtmlfile : utils.createIframe;
var iframeObj;
_window[WPrefix][that.id] = {
start: function () {
iframeObj.loaded();
},
message: function (data) {
that.dispatchEvent(new SimpleEvent('message', {'data': data}));
},
stop: function () {
that.iframe_close({}, 'network');
}
};
that.iframe_close = function(e, abort_reason) {
iframeObj.cleanup();
that.iframe_close = iframeObj = null;
delete _window[WPrefix][that.id];
that.dispatchEvent(new SimpleEvent('close', {reason: abort_reason}));
};
iframeObj = constructor(url, function(e) {
that.iframe_close({}, 'permanent');
});
};
HtmlfileReceiver.prototype = new REventTarget();
HtmlfileReceiver.prototype.abort = function() {
var that = this;
if (that.iframe_close) {
that.iframe_close({}, 'user');
}
};
|