/** * @ignore * detect if current browser supports various features. * @author yiminghe@gmail.com */ (function (S) { var Env = S.Env, win = Env.host, UA = S.UA, // nodejs doc = win.document || {}, // phantomjs issue: http://code.google.com/p/phantomjs/issues/detail?id=375 isTouchSupported = ('ontouchstart' in doc) && !(UA.phantomjs), documentMode = doc.documentMode, ie = documentMode || UA.ie, isNativeJSONSupported = ((Env.nodejs && typeof global === 'object') ? global : win).JSON; // ie 8.0.7600.16315@win7 json bug! if (documentMode && documentMode < 9) { isNativeJSONSupported = 0; } /** * test browser features * @class KISSY.Features * @private * @singleton */ S.Features = { // http://blogs.msdn.com/b/ie/archive/2011/09/20/touch-input-for-ie10-and-metro-style-apps.aspx /** * @ignore * whether support win8 pointer event. * @type {Boolean} */ // isMsPointerEnabled: "msPointerEnabled" in (win.navigator || {}), /** * whether support touch event. * @method * @return {Boolean} */ isTouchSupported: function () { return isTouchSupported; }, isDeviceMotionSupported: function () { return !!win['DeviceMotionEvent']; }, 'isHashChangeSupported': function () { // ie8 支持 hashchange // 但 ie8 以上切换浏览器模式到 ie7(兼容模式), // 会导致 'onhashchange' in window === true,但是不触发事件 return ( 'onhashchange' in win) && (!ie || ie > 7); }, /** * whether support native json * @method * @return {Boolean} */ isNativeJSONSupported: function () { return isNativeJSONSupported; } }; })(KISSY);