Files
socket.io/lib/util.js
Guillermo Rauch 21b75fa15e Initial import
2011-11-18 10:08:39 -08:00

90 lines
1.5 KiB
JavaScript

/**
* Inheritance.
*
* @param {Function} ctor a
* @param {Function} ctor b
* @api public
*/
exports.inherits = function inherits (a, b) {
function c () { }
c.prototype = b.prototype;
a.prototype = new c;
}
/**
* UA / engines detection namespace.
*
* @namespace
*/
util.ua = {};
/**
* Whether the UA supports CORS for XHR.
*
* @api public
*/
util.ua.hasCORS = 'undefined' != typeof XMLHttpRequest && (function () {
try {
var a = new XMLHttpRequest();
} catch (e) {
return false;
}
return a.withCredentials != undefined;
})();
/**
* Detect webkit.
*
* @api public
*/
util.ua.webkit = 'undefined' != typeof navigator &&
/webkit/i.test(navigator.userAgent);
/**
* Detect gecko.
*
* @api public
*/
util.ua.gecko = 'undefined' != typeof navigator &&
/gecko/i.test(navigator.userAgent);
// end
/**
* XHR request helper.
*
* @param {Boolean} whether we need xdomain
* @api private
*/
util.request = function request (xdomain) {
// if node
var XMLHttpRequest = require('xmlhttprequest').XMLHttpRequest;
return new XMLHttpRequest();
// end
if (xdomain && 'undefined' != typeof XDomainRequest) {
return new XDomainRequest();
}
// XMLHttpRequest can be disabled on IE
try {
if ('undefined' != typeof XMLHttpRequest && (!xdomain || util.ua.hasCORS)) {
return new XMLHttpRequest();
}
} catch (e) { }
if (!xdomain) {
try {
return new ActiveXObject('Microsoft.XMLHTTP');
} catch(e) { }
}
};