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 设计模式 富有表现力的Javascript(一)
May 26 Javascript
计算新浪Weibo消息长度(还可以输入119字)
Jul 02 Javascript
Javascript和HTML5利用canvas构建Web五子棋游戏实现算法
Jul 17 Javascript
JavaScript中实现单体模式分享
Jan 29 Javascript
使用jQuery获得内容以及内容的属性
Feb 26 Javascript
基于JavaScript实现动态创建表格和增加表格行数
Dec 20 Javascript
浅谈js的异步执行
Oct 18 Javascript
详解jQuery中的事件
Dec 14 Javascript
JavaScript中localStorage对象存储方式实例分析
Jan 12 Javascript
Vue组件化开发思考
Feb 02 Javascript
JavaScript使用递归和循环实现阶乘的实例代码
Aug 28 Javascript
浅谈redux, koa, express 中间件实现对比解析
May 23 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
ThinkPHP3.1新特性之对Ajax的支持更加完善
2014/06/19 PHP
Windows7下的php环境配置教程
2015/02/28 PHP
ThinkPHP框架表单验证操作方法
2017/07/19 PHP
详解php 使用Callable Closure强制指定回调类型
2017/10/26 PHP
返回对象在当前级别中是第几个元素的实现代码
2011/01/20 Javascript
js获取当前路径的简单示例代码
2014/01/08 Javascript
display和visibility的区别示例介绍
2014/02/26 Javascript
常用javascript表单验证汇总
2020/07/20 Javascript
jQuery实现背景弹性滚动的导航效果
2016/06/01 Javascript
深入理解jQuery.data() 的实现方式
2016/11/30 Javascript
微信小程序 中wx.chooseAddress(OBJECT)实例详解
2017/03/31 Javascript
基于input动态模糊查询的实现方法
2017/12/12 Javascript
webpack-mvc 传统多页面组件化开发详解
2019/05/07 Javascript
Bootstrap简单实用的表单验证插件BootstrapValidator用法实例详解
2020/03/29 Javascript
Jquery+AJAX实现无刷新上传并重命名文件操作示例【PHP后台接收】
2020/05/29 jQuery
[13:56]DAC2018 4.5SOLO赛决赛 MidOne vs Paparazi第一场
2018/04/06 DOTA
python利用datetime模块计算时间差
2015/08/04 Python
python&amp;MongoDB爬取图书馆借阅记录
2016/02/05 Python
python开发环境PyScripter中文乱码问题解决方案
2016/09/11 Python
Python 3.6 读取并操作文件内容的实例
2018/04/23 Python
Pytorch Tensor基本数学运算详解
2019/12/30 Python
Django模板标签{% for %}循环,获取制定条数据实例
2020/05/14 Python
为什么说python适合写爬虫
2020/06/11 Python
可以随进度显示不同颜色的css3进度条分享
2014/04/11 HTML / CSS
利用canvas实现图片压缩的示例代码
2018/07/17 HTML / CSS
一家专门经营包包的英国网站:MyBag
2019/09/08 全球购物
罗技英国官方网站:Logitech UK
2020/11/03 全球购物
研究生自我鉴定范文
2013/10/30 职场文书
小学生班会演讲稿
2014/01/09 职场文书
银行介绍信范文
2014/01/10 职场文书
贸易跟单员英文求职信
2014/04/19 职场文书
电子信息工程专业求职信
2014/06/28 职场文书
初中优秀学生评语
2014/12/29 职场文书
社区宣传标语口号
2015/12/26 职场文书
python小程序之飘落的银杏
2021/04/17 Python
浅谈Python3中datetime不同时区转换介绍与踩坑
2021/08/02 Python