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 相关文章推荐
JavaScript DOM 添加事件
Feb 14 Javascript
IE与FireFox中的childNodes区别
Oct 20 Javascript
JS OffsetParent属性深入解析
Jan 13 Javascript
JavaScript保留关键字汇总
Dec 01 Javascript
bootstrap读书笔记之CSS组件(上)
Oct 17 Javascript
JS实现焦点图轮播效果的方法详解
Dec 19 Javascript
快速掌握jquery分页插件jqPaginator的使用方法
Aug 09 jQuery
vue之父子组件间通信实例讲解(props、$ref、$emit)
May 22 Javascript
js实现点击展开隐藏效果(实例代码)
Sep 28 Javascript
JavaScript实现的九种排序算法
Mar 04 Javascript
15 分钟掌握vue-next响应式原理
Oct 13 Javascript
使用JavaScript获取扫码枪扫描得到的条形码的思路代码详解
Jun 10 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
关于crontab的使用详解
2013/06/24 PHP
php 购物车完整实现代码
2014/06/05 PHP
微信营销平台系统?刮刮乐的开发
2014/06/10 PHP
php 无限级分类,超级简单的无限级分类,支持输出树状图
2014/06/29 PHP
php实现的debug log日志操作类实例
2016/07/12 PHP
扩展jQuery 键盘事件的几个基本方法
2009/10/30 Javascript
jquery中ajax学习笔记3
2011/10/16 Javascript
ParseInt函数参数设置介绍
2014/01/02 Javascript
jquery隔行换色效果实现方法
2015/01/15 Javascript
JavaScript简单判断复选框是否选中及取出值的方法
2015/08/13 Javascript
JS中split()用法(将字符串按指定符号分割成数组)
2016/10/24 Javascript
AngularJS1.X学习笔记2-数据绑定详解
2017/04/01 Javascript
新版vue-cli模板下本地开发环境使用node服务器跨域的方法
2018/04/03 Javascript
vue使用高德地图根据坐标定位点的实现代码
2019/08/22 Javascript
Vue 实现点击空白处隐藏某节点的三种方式(指令、普通、遮罩)
2019/10/23 Javascript
在vue中使用echars实现上浮与下钻效果
2019/11/08 Javascript
nodejs nedb 封装库与使用方法示例
2020/02/06 NodeJs
vue中是怎样监听数组变化的
2020/10/24 Javascript
[03:00]2014DOTA2国际邀请赛 Titan淘汰潸然泪下Ohaiyo专访
2014/07/15 DOTA
Python中函数的多种格式和使用实例及小技巧
2015/04/13 Python
Python之pymysql的使用小结
2019/07/01 Python
pytorch 输出中间层特征的实例
2019/08/17 Python
numpy库reshape用法详解
2020/04/19 Python
美国家居用品和厨具购物网站:DealsDot
2019/10/07 全球购物
Kusmi茶美国官网:优质散叶茶和茶包
2019/10/13 全球购物
代码中finally中的代码会不会执行
2012/02/06 面试题
王老吉广告词
2014/03/20 职场文书
竞选班干部演讲稿
2014/04/24 职场文书
大学生应聘求职信
2014/05/26 职场文书
图书馆标语
2014/06/19 职场文书
实习护士自荐信
2014/06/21 职场文书
教师党员自我评价范文
2015/03/04 职场文书
运动会致辞稿
2015/07/29 职场文书
Python合并pdf文件的工具
2021/07/01 Python
Nginx+Tomcat负载均衡集群的实现示例
2021/10/24 Servers
MySQL数据库中varchar类型的数字比较大小的方法
2021/11/17 MySQL