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 相关文章推荐
IE 条件注释详解总结(附实例代码)
Aug 29 Javascript
jQuery lazyload 的重复加载错误以及修复方法
Nov 19 Javascript
javascript得到当前页的来路即前一页地址的方法
Feb 18 Javascript
AngularJs根据访问的页面动态加载Controller的解决方案
Feb 04 Javascript
JS模仿编辑器实时改变文本框宽度和高度大小的方法
Aug 17 Javascript
js实现的简单radio背景颜色选择器代码
Aug 18 Javascript
jQuery 插件实现随机自由弹跳气泡样式
Jan 12 Javascript
js实现拖拽上传图片功能
Aug 01 Javascript
select标签设置默认选中的选项方法
Mar 02 Javascript
Vue弹出菜单功能的实现代码
Sep 12 Javascript
详解React中传入组件的props改变时更新组件的几种实现方法
Sep 13 Javascript
浅谈Webpack4 Tree Shaking 终极优化指南
Nov 18 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并发访问实例代码
2012/09/06 PHP
php定界符
2014/06/19 PHP
深入理解PHP原理之执行周期分析
2016/06/01 PHP
ThinkPHP框架获取最后一次执行SQL语句及变量调试简单操作示例
2018/06/13 PHP
JavaScript中的集合及效率
2010/01/08 Javascript
jQuery实现隔行背景色变色
2014/11/24 Javascript
深入解析JavaScript中函数的Currying柯里化
2016/03/19 Javascript
如何用JavaScript实现动态修改CSS样式表
2016/05/20 Javascript
使用Xcache缓存器加速PHP网站的配置方法
2017/04/22 Javascript
详解如何使用webpack打包Vue工程
2017/05/27 Javascript
原生js实现简单的链式操作
2017/07/04 Javascript
JavaScript实现职责链模式概述
2018/01/25 Javascript
Vue 3.x+axios跨域方案的踩坑指南
2019/07/04 Javascript
微信小程序下拉框搜索功能的实现方法
2019/07/31 Javascript
Vue 用Vant实现时间选择器的示例代码
2019/10/25 Javascript
vue把输入框的内容添加到页面的实例讲解
2019/11/11 Javascript
vue实现输入一位数字转汉字功能
2019/12/13 Javascript
详解为什么Vue中不要用index作为key(diff算法)
2020/04/04 Javascript
小程序实现上传视频功能
2020/08/18 Javascript
JS实现简单贪吃蛇小游戏
2020/10/28 Javascript
[01:12](回顾)DOTA2国际邀请赛,全世界DOTAer的盛宴
2014/07/01 DOTA
[49:05]OG vs Newbee 2019DOTA2国际邀请赛淘汰赛 胜者组 BO3 第二场 8.21.mp4
2020/07/19 DOTA
Python中使用urllib2防止302跳转的代码例子
2014/07/07 Python
Python实现图片转字符画的示例
2017/08/22 Python
人机交互程序 python实现人机对话
2017/11/14 Python
详解用Python为直方图绘制拟合曲线的两种方法
2019/08/21 Python
Python drop方法删除列之inplace参数实例
2020/06/27 Python
Django-celery-beat动态添加周期性任务实现过程解析
2020/11/26 Python
python中添加模块导入路径的方法
2021/02/03 Python
番木瓜健康和保健产品第一大制造商:Herbal Papaya
2017/04/25 全球购物
抄作业检讨书
2014/02/17 职场文书
2014年林业工作总结
2014/12/05 职场文书
技术负责人岗位职责
2015/02/10 职场文书
手把手教你制定暑期学习计划,让你度过充实的暑假
2019/08/22 职场文书
Python图像处理之图像拼接
2021/04/28 Python
python和anaconda的区别
2022/05/06 Python