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 定义新对象方法
Feb 20 Javascript
jQuery中 noConflict() 方法使用
Apr 25 Javascript
禁止页面刷新让F5快捷键及右键都无效
Jan 22 Javascript
使用jQuery和PHP实现类似360功能开关效果
Feb 12 Javascript
jQuery表格排序组件-tablesorter使用示例
May 26 Javascript
原生js编写设为首页兼容ie、火狐和谷歌
Jun 05 Javascript
Angular.js与Bootstrap相结合实现表格分页代码
Apr 12 Javascript
HTML5实现微信拍摄上传照片功能
Apr 21 Javascript
实例学习JavaScript读取和写入cookie
Jan 29 Javascript
JS打印彩色菱形的实例代码
Aug 15 Javascript
ES6中let 和 const 的新特性
Sep 03 Javascript
antd table按表格里的日期去排序操作
Nov 17 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
[FAQ]PHP中的一些常识:类篇
2006/10/09 PHP
获得Google PR值的PHP代码
2007/01/28 PHP
php读取xml实例代码
2010/01/28 PHP
基于php常用正则表达式的整理汇总
2013/06/08 PHP
php出现内存位置访问无效错误问题解决方法
2014/08/16 PHP
Laravel5.5以下版本中如何自定义日志行为详解
2018/08/01 PHP
TP5框架实现一次选择多张图片并预览的方法示例
2020/04/04 PHP
js验证是否为数字的总结
2013/04/14 Javascript
jQuery对象初始化的传参方式
2015/02/26 Javascript
JavaScript 事件绑定及深入
2015/04/13 Javascript
jQuery原生的动画效果
2015/07/10 Javascript
jquery实现手风琴效果
2015/11/20 Javascript
bootstrap Validator 模态框、jsp、表单验证 Ajax提交功能
2017/02/17 Javascript
使用Node.js实现简易MVC框架的方法
2017/08/07 Javascript
Angular 5.0 来了! 有这些大变化
2017/11/15 Javascript
vue组件传递对象中实现单向绑定的示例
2018/02/28 Javascript
js拖动滑块和点击水波纹效果实例代码
2018/10/16 Javascript
JS实现图片切换特效
2019/12/23 Javascript
JavaScript oncopy事件用法实例解析
2020/05/13 Javascript
python文件读写并使用mysql批量插入示例分享(python操作mysql)
2014/02/17 Python
Pyhton中防止SQL注入的方法
2015/02/05 Python
Python实现获取汉字偏旁部首的方法示例【测试可用】
2018/12/18 Python
基于Python的ModbusTCP客户端实现详解
2019/07/13 Python
python破解bilibili滑动验证码登录功能
2019/09/11 Python
Python提取PDF内容的方法(文本、图像、线条等)
2019/09/25 Python
利用CSS的Sass预处理器(框架)来制作居中效果
2016/03/10 HTML / CSS
TripAdvisor德国:全球领先的旅游网站
2017/12/07 全球购物
Lookfantastic瑞典:英国知名美妆购物网站
2018/04/06 全球购物
建筑系毕业生自我鉴定
2014/01/24 职场文书
无刑事犯罪记录证明
2014/09/18 职场文书
2015年扫黄打非工作总结
2015/05/13 职场文书
城镇居民医疗保险工作总结
2015/08/10 职场文书
导游词之阆中古城
2019/12/23 职场文书
Linux7.6二进制安装Mysql8.0.27详细操作步骤
2021/11/27 MySQL
VUE解决跨域问题Access to XMLHttpRequest at
2022/05/06 Vue.js
浅谈MySql update会锁定哪些范围的数据
2022/06/25 MySQL