[转帖]Mootools源码分析-05 -- Browser

原帖地址:http://space.flash8.net/space/?uid-18713-action-viewspace-itemid-400646

原作者:我佛山人

 

/*
浏览器相关特性,1.2之前附加到window对象中,并不合理
利用各浏览器的专有特征判断
*/
var  Browser  =   new  Hash({
    
// 浏览器内核及版本
    Engine: {name:  ' unknown ' , version:  '' },
    
// 当前系统平台
    Platform: {name: (navigator.platform.match( / mac|win|linux / i)  ||  [ ' other ' ])[ 0 ].toLowerCase()},
    
// 浏览器特性,是否支持xpath及air,使用!!将表达式转为布尔值
    Features: {xpath:  !! (document.evaluate), air:  !! (window.runtime)},
    
// 浏览器插件
    Plugins: {}
});

// Opera
if  (window.opera) Browser.Engine  =  {name:  ' presto ' , version: (document.getElementsByClassName)  ?   950  :  925 };
// IE
else   if  (window.ActiveXObject) Browser.Engine  =  {name:  ' trident ' , version: (window.XMLHttpRequest)  ?   5  :  4 };
// Safari
else   if  ( ! navigator.taintEnabled) Browser.Engine  =  {name:  ' webkit ' , version: (Browser.Features.xpath)  ?   420  :  419 };
// Mozilla
else   if  (document.getBoxObjectFor  !=   null ) Browser.Engine  =  {name:  ' gecko ' , version: (document.getElementsByClassName)  ?   19  :  18 };

/*
加上判断引擎及版本的属性快捷方式,在没有这行代码之前,
判断是否IE只能用
Browser.Engine.name == 'trident'  为真;
如果要判断IE7则需要
(Browser.Engine.name == 'trident' && Browser.Engine.version == 5)为真;
而现在,判断IE只需要
Browser.Engine.trident 为真
判断IE7只需要
Browser.Engine.trident5 为真,同理可推
*/
Browser.Engine[Browser.Engine.name] 
=  Browser.Engine[Browser.Engine.name  +  Browser.Engine.version]  =   true ;

// 使用iPod
if  (window.orientation  !=  undefined)    Browser.Platform.name  =   ' ipod ' ;

// 与内核及版本的快捷方式类似,快速判断系统平台的方式
Browser.Platform[Browser.Platform.name]  =   true ;

// XMLHttp的请求,按照语义放到Browser对象中,同时使用$try自动选择浏览器支持的对象
Browser.Request  =   function ()    {
    
return  $ try ( function ()    {
        
return   new  XMLHttpRequest();
    }, 
function ()    {
        
return   new  ActiveXObject( ' MSXML2.XMLHTTP ' );
    });
};

// 是否支持XMLHttpRequest
Browser.Features.xhr  =   !! (Browser.Request());

// Flash插件信息
Browser.Plugins.Flash  =  ( function ()    {
    
var  version  =  ($ try ( function ()    {
        
// 非IE下的插件获取方式
         return  navigator.plugins[ ' Shockwave Flash ' ].descrīption;
    }, 
function ()    {
    
// IE下的插件获取方式
         return   new  ActiveXObject( ' ShockwaveFlash.ShockwaveFlash ' ).GetVariable( ' $version ' );
    }) 
||   ' 0 r0 ' ).match( / \d+ / g);
    
return  {version: parseInt(version[ 0 ||   0   +   ' . '   +  version[ 1 ||   0 ), build: parseInt(version[ 2 ||   0 )};
})();

// 将指定字符串作为脚本执行
function  $exec(text)    {
    
if  ( ! text)  return  text;
    
if  (window.execscrīpt)    {  // IE
        window.execscrīpt(text);
    } 
else     {  // 非IE
         var  scrīpt  =  document.createElement( ' scrīpt ' );
        scrīpt.setAttribute(
' type ' ' text/javascrīpt ' );
        scrīpt.text 
=  text;
        document.head.appendChild(scrīpt);
        
// 注意DOM节点的移除,脚本执行之后已经没有存在的必要了
        document.head.removeChild(scrīpt); 
    }
    
return  text;
};

 

转载于:https://www.cnblogs.com/maapaa/articles/mootools-s-5.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值