fix-ie5.js扩展在IE5下不能使用的几个方法


Posted in Javascript onAugust 20, 2007

在IE5下的Javascript:
Array不支持push(),pop();Function不支持apply();String对象的replace方法不支持替换成一个处理函数。
使用下面的代码就可修复上述方法在IE5下无效的问题。
/*
  fix-ie5.js, version 1.0 (pre-release) (2005/05/15) x3
  Copyright 2005, Dean Edwards
  Web: http://dean.edwards.name/

  This software is licensed under the CC-GNU LGPL
  Web: http://creativecommons.org/licenses/LGPL/2.1/
*/

if (/MSIE 5.0/.test(navigator.userAgent)) new function() {

  var $$apply = function($function, $object, $arguments) {
    $function.apply($object, $arguments);
  };

  // fix String.replace
  if (''.replace(/^/, String)) {
    // preserve String.replace
    var _stringReplace = String.prototype.replace;
    // create String.replace for handling functions
    var _functionReplace = function($expression, $replacement) {
      var $match, $newString = "", $string = this;
      while ($string && ($match = $expression.exec($string))) {
        $newString += $string.slice(0, $match.index) + $$apply($replacement, this, $match);
        $string = $string.slice($match.lastIndex);
      }
      return $newString + $string;
    };
    // replace String.replace
    String.prototype.replace = function ($expression, $replacement) {
      this.replace = (typeof $replacement == "function") ? _functionReplace : _stringReplace;
      return this.replace($expression, $replacement);
    };
  }

  // fix Function.apply
  if (!Function.apply) {
    var APPLY = "apply-" + Number(new Date);
    $$apply = function(f, o, a) {
      var r;
      o[APPLY] = f;
      switch (a.length) { // deconstruct for speed
        case 0: r = o[APPLY](); break;
        case 1: r = o[APPLY](a[0]); break;
        case 2: r = o[APPLY](a[0], a[1]); break;
        case 3: r = o[APPLY](a[0], a[1], a[2]); break;
        case 4: r = o[APPLY](a[0], a[1], a[2], a[3]); break;
        default:
          var aa = [], i = a.length - 1;
          do aa[i] = "a[" + i + "]"; while (i--);
          eval("r=o[APPLY](" + aa + ")");
      }
      delete o[APPLY];
      return r;
    };
    // fix ICommon
    ICommon.valueOf.prototype.inherit = function() {
      return $$apply(arguments.callee.caller.ancestor, this, arguments);
    };
  }

  // array fixes
  if (![].push) Array.prototype.push = function() {
    for (var i = 0; i < arguments.length; i++) {
      this[this.length] = arguments[i];
    }
    return this.length;
  };
  if (![].pop) Array.prototype.pop = function() {
    var $item = this[this.length - 1];
    this.length--;
    return $item;
  };
};

Javascript 相关文章推荐
js arguments.callee的应用代码
May 07 Javascript
Jquery中ajax方法data参数的用法小结
Feb 12 Javascript
javascript实现的平方米、亩、公顷单位换算小程序
Aug 11 Javascript
JSP基于Bootstrap分页显示实例解析
Jun 12 Javascript
JS实现的数字格式化功能示例
Feb 10 Javascript
将input框中输入内容显示在相应的div中【三种方法可选】
May 08 Javascript
javascript 作用于作用域链的详解
Sep 27 Javascript
vue中echarts3.0自适应的方法
Feb 26 Javascript
基于Vue实现平滑过渡的拖拽排序功能
Jun 12 Javascript
关于Layui Table隐藏列问题
Sep 16 Javascript
详解Vue的watch中的immediate与watch是什么意思
Dec 30 Javascript
QT与javascript交互数据的实现
May 26 Javascript
关于恒等于(===)和非恒等于(!==)
Aug 20 #Javascript
图片格式的JavaScript和CSS速查手册
Aug 20 #Javascript
javascript 一个自定义长度的文本自动换行的函数
Aug 19 #Javascript
js类中获取外部函数名的方法
Aug 19 #Javascript
写了一个layout,拖动条连贯,内容区可为iframe
Aug 19 #Javascript
转自Jquery官方 jQuery1.1.3发布,速度提升800%,体积保持20K
Aug 19 #Javascript
Code: write(s,d) 输出连续字符串
Aug 19 #Javascript
You might like
目录,文件操作详谈―PHP
2006/11/25 PHP
php2html php生成静态页函数
2008/12/08 PHP
PHP中常见的缓存技术实例分析
2015/09/23 PHP
PHP QRCODE生成彩色二维码的方法
2016/05/19 PHP
PHP new static 和 new self详解
2017/02/19 PHP
PHP hebrev()函数用法讲解
2019/02/21 PHP
新浪微博字数统计 textarea字数统计实现代码
2011/08/28 Javascript
学习从实践开始之jQuery插件开发 菜单插件开发
2012/05/03 Javascript
jQuery实现简单的列表式导航菜单效果代码
2015/08/31 Javascript
通过node-mysql搭建Windows+Node.js+MySQL环境的教程
2016/03/01 Javascript
jQuery动态增减行的实例代码解析(推荐)
2016/12/05 Javascript
jQuery解析返回的xml和json方法详解
2017/01/05 Javascript
微信小程序小组件 基于Canvas实现直播点赞气泡效果
2020/05/29 Javascript
Angular.JS中select下拉框设置value的方法
2017/06/20 Javascript
文本溢出插件jquery.dotdotdot.js使用方法详解
2017/06/22 jQuery
Vue中建立全局引用或者全局命令的方法
2017/08/21 Javascript
详解从Vue.js源码看异步更新DOM策略及nextTick
2017/10/11 Javascript
JavaScript执行环境及作用域链实例分析
2018/08/01 Javascript
Vue开发之封装分页组件与使用示例
2019/04/25 Javascript
vue-cli3添加模式配置多环境变量的方法
2019/06/05 Javascript
vue实现抽屉弹窗效果
2020/11/15 Javascript
用python分割TXT文件成4K的TXT文件
2009/05/23 Python
浅析Python中else语句块的使用技巧
2016/06/16 Python
在Pycharm中设置默认自动换行的方法
2019/01/16 Python
浅谈python3.x pool.map()方法的实质
2019/01/16 Python
用Q-learning算法实现自动走迷宫机器人的方法示例
2019/06/03 Python
对python3 sort sorted 函数的应用详解
2019/06/27 Python
关于ResNeXt网络的pytorch实现
2020/01/14 Python
Python基于爬虫实现全网搜索并下载音乐
2021/02/14 Python
乐高奥地利官方商店:LEGO Shop AT
2019/07/16 全球购物
英国行业制服供应商:Alexandra
2019/09/14 全球购物
大学生职业生涯规划书
2014/03/14 职场文书
无刑事犯罪记录证明范本
2014/09/29 职场文书
升学宴答谢词
2015/01/05 职场文书
2015年幼儿园教育教学工作总结
2015/05/25 职场文书
企业催款函范本
2015/06/24 职场文书