`
suyang119
  • 浏览: 16849 次
社区版块
存档分类
最新评论

Mootools源码分析

阅读更多
/*
浏览器相关特性,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;
};
分享到:
评论

相关推荐

    mootools源码分析.rar

    通过对"Mootools源码分析"的深入探讨,我们可以了解到这个框架的核心设计理念和实现机制。 1. **模块化设计**:MooTools采用模块化设计,使得开发者可以按需加载所需的功能,降低页面加载时间。例如,`Core`模块...

    Mootools 源码分析文档与完整文档打包下载.zip

    这个压缩包包含了Mootools的源码分析文档和完整的官方文档,是深入理解Mootools工作原理和使用技巧的重要资源。 首先,我们来看"使用须知.txt"。这个文件通常会包含关于如何正确使用压缩包内资源的提示和注意事项。...

    mootools源码分析

    在对MooTools源码进行分析时,我们可以关注以下几个关键知识点: 1. **类与对象系统**:MooTools提供了基于原型的面向对象系统,通过`Class`和`extend`方法创建类,并可以通过`implement`方法添加或扩展类的方法。`...

    mootools-1.2 源码分析

    内含: 01-native.js 02-utils.js 03-hash.js 04-array.js 05-browser.js 06-window.js 07-document.js 08-function.js 09-number.js 10-string.js 11-event.js 12-class.js ...mootools1.2中文文档(html版)

    [pdf]Jquery1.2.6源码分析

    jQuery 是一个非常优秀的 JS 库,与 Prototype,YUI,Mootools 等众多的 Js 类 库相比,它剑走偏锋,从web开发的...这就是本源码分析的原因,让所有使用 jQuery 的读者,能快速 上手 jQuery的源码,并在开发中得心应用。

    Jquery1.2.6 源码分析

    这就是本源码分析的原因,让所有使用jQuery的读者,能快速上手jQuery的源码,并在开发中得心应用。 Jquery的网络资源丰富,但Baidu了很久,很难找到那种完全深入地分析Jquery源码的文稿。倒是Jquery的开发者,John ...

    jquery 源码分析

    ### jQuery源码分析 #### 一、概述 jQuery作为一个卓越的JavaScript库,以其简洁高效的特性在前端开发领域占据了一席之地。与Prototype、YUI、Mootools等其他JavaScript库相比,jQuery更加注重实用性,去除了一些...

    Jquery1.2.6源码分析教程

    **jQuery 1.2.6 源码分析教程** jQuery 是一个广泛使用的 JavaScript 库,因其简洁的语法和强大的功能而备受开发者喜爱。在 jQuery 1.2.6 版本中,虽然它已经相对老旧,但其背后的实现原理和优化策略仍然值得深入...

    mootools demo打包_mootools.svn.js_中文手册.zip

    这个文件可能包含了MooTools的源码,便于开发者查看、调试和定制。通过分析这个文件,可以了解MooTools的具体实现细节,包括各个模块的实现逻辑和API接口。 3. **MooTools的主要特性** - **事件处理**:MooTools...

    基于js mootools实现的仿win8开始菜单界面特效源码.zip

    通过分析和理解源码,你可以学习到以下知识点: 1. **MooTools基础**:了解MooTools的核心概念,如类系统、事件处理、DOM操作和动画创建。 2. **响应式设计**:学习如何根据屏幕尺寸和设备类型调整界面布局,以适应...

    mootools做的评分效果

    7. **源码分析**:通过阅读提供的博客文章,我们可以深入了解作者是如何结合上述知识点来实现具体功能的。通常,源码会包含类定义(如果使用了MooTools的Class系统)、事件绑定和处理逻辑。 8. **工具使用**:可能...

    jquery源码分析

    ### jQuery源码分析 #### 一、概述 jQuery作为一个卓越的JavaScript库,相较于其他同类库如Prototype、YUI和Mootools等,在实用性方面做出了显著的优化。它摒弃了一些花哨但实际应用价值较低的功能,专注于提供...

    Mootools做的模板引擎插件,实现代码分离

    通过阅读和分析源码,你可以深入理解如何使用Mootools来创建和管理模板,以及如何实现数据和视图的绑定。 "Test"目录可能包含了插件的测试用例,这些用例通常展示了插件的不同功能和用法,是学习如何实际应用插件的...

    Jquery1.2.6源码分析

    jQuery是一个非常优秀的JS库,与Prototype,YUI,Mootools等众多的Js类库相比,它剑走偏锋,从web开发的实用角度出发,抛除了其它Lib中一些中看但不实用的东西,为开发者提供了优美短小而精悍的类库。其使用简单,文档...

    mootools小游戏GoToHell(未完成版0.0.0.1)

    《mootools小游戏GoToHell(未完成版0.0.0.1)...虽然这个项目是一个未完成的作品,但它为我们提供了一个实际的MooTools游戏开发案例,通过研究其源码和资源,我们可以提升自己的前端开发技能,特别是在游戏开发领域。

    Jquery源码分析

    ### Jquery源码分析 #### 1. 概述 jQuery作为一款卓越的JavaScript库,在众多JavaScript类库中脱颖而出,以其简洁高效的特性受到广大开发者的青睐。与其他类库(如Prototype、YUI、Mootools)相比,jQuery更加注重...

Global site tag (gtag.js) - Google Analytics