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 SHA-1:Secure Hash Algorithm
Dec 20 Javascript
Lazy Load 延迟加载图片的jQuery插件中文使用文档
Oct 18 Javascript
jquery移动节点实例
Jan 14 Javascript
JavaScript实现输入框(密码框)出现提示语
Jan 12 Javascript
AngularJS中isolate scope的用法分析
Nov 22 Javascript
ES6入门教程之Iterator与for...of循环详解
May 17 Javascript
Ionic3 UI组件之autocomplete详解
Jun 08 Javascript
Vue组件通信的四种方式汇总
Feb 08 Javascript
javascript实现计算器功能
Mar 30 Javascript
Nuxt配置Element-UI按需引入的操作方法
Jul 06 Javascript
antd Form组件方法getFieldsValue获取自定义组件的值操作
Oct 29 Javascript
vue穿梭框实现上下移动
Jan 29 Vue.js
关于恒等于(===)和非恒等于(!==)
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
德生BCL3000的电路分析和打磨
2021/03/02 无线电
PHP常用开发函数解析之数组篇[未完结]
2012/07/30 PHP
php读取mysql中文数据出现乱码的解决方法
2013/08/16 PHP
php版小黄鸡simsimi聊天机器人接口分享
2014/01/26 PHP
解决php的“It is not safe to rely on the system’s timezone settings”问题
2015/10/08 PHP
Docker配置PHP开发环境教程
2016/12/21 PHP
php 中奖概率算法实现代码
2017/01/25 PHP
javascript 自动填写表单的实现方法
2010/04/09 Javascript
Javascript简单实现可拖动的div
2013/10/22 Javascript
JQuery EasyUI 日期控件如何控制日期选择区间
2014/05/05 Javascript
JQuery CheckBox(复选框)操作方法汇总
2015/04/15 Javascript
jQuery实现的仿select功能代码
2015/08/19 Javascript
全面接触神奇的Bootstrap导航条实战篇
2016/08/01 Javascript
JS实现倒计时(天数、时、分、秒)
2016/11/16 Javascript
利用jQuery解析获取JSON数据
2017/04/08 jQuery
Vue仿手机qq的实例代码(demo)
2017/09/08 Javascript
AngularJS使用ng-repeat遍历二维数组元素的方法详解
2017/11/11 Javascript
JavaScript求一组数的最小公倍数和最大公约数常用算法详解【面向对象,回归迭代和循环】
2018/05/07 Javascript
解决Vue+Element ui开发中碰到的IE问题
2018/09/03 Javascript
浅谈Layui的eleTree树式选择器使用方法
2019/09/25 Javascript
[05:05]DOTA2亚洲邀请赛 战队出场仪式
2015/02/07 DOTA
Python完成哈夫曼树编码过程及原理详解
2019/07/29 Python
如何爬取通过ajax加载数据的网站
2019/08/15 Python
Python并发请求下限制QPS(每秒查询率)的实现代码
2020/06/05 Python
丝芙兰加拿大官方网站:SEPHORA加拿大
2018/11/20 全球购物
校三好学生主要事迹
2014/01/11 职场文书
研究生毕业鉴定
2014/01/29 职场文书
学校十一活动方案
2014/02/01 职场文书
实习报告评语
2014/04/26 职场文书
小学综治宣传月活动总结
2014/07/02 职场文书
房屋出租协议书范本(标准版)
2014/09/24 职场文书
实习生辞职信范文
2015/03/02 职场文书
Python Numpy之linspace用法说明
2021/04/17 Python
Python绘制分类图的方法
2021/04/20 Python
图文详解Nginx版本平滑升级方案
2021/09/15 Servers
《仙剑客栈2》第一弹正式宣传片公开 年内发售
2022/04/07 其他游戏