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 相关文章推荐
jquery select操作的日期联动实现代码
Dec 06 Javascript
禁止空格提交表单的js代码
Nov 17 Javascript
jquery中$.post()方法的简单实例
Feb 04 Javascript
js面向对象编程之如何实现方法重载
Jul 02 Javascript
JavaScript如何动态创建table表格
Aug 02 Javascript
JavaScript匿名函数之模仿块级作用域
Dec 12 Javascript
jquery实现表单获取短信验证码代码
Mar 13 Javascript
Vue2.0结合webuploader实现文件分片上传功能
Mar 09 Javascript
javascript关于“时间”的一次探索
Jul 24 Javascript
JS加载解析Markdown文档过程详解
May 19 Javascript
解决在Vue中使用axios POST请求变成OPTIONS的问题
Aug 14 Javascript
js实现圆形菜单选择器
Dec 03 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 图片加水印与上传图片加水印php类
2010/05/12 PHP
PHP XML error parsing SOAP payload on line 1
2010/06/17 PHP
PHP反射类ReflectionClass和ReflectionObject的使用方法
2013/11/13 PHP
Win7 64位系统下PHP连接Oracle数据库
2014/08/20 PHP
PHP全局变量与超级全局变量区别分析
2016/04/01 PHP
PHP中in_array的隐式转换的解决方法
2018/03/06 PHP
PHP pthreads v3下worker和pool的使用方法示例
2020/02/21 PHP
javascript表单验证 - Parsley.js使用和配置
2013/01/25 Javascript
深入理解JavaScript高级之词法作用域和作用域链
2013/12/10 Javascript
Javascript实现多彩雪花从天降散落效果的方法
2015/02/02 Javascript
SpringMVC restful 注解之@RequestBody进行json与object转换
2015/12/10 Javascript
JavaScript事件类型中UI事件详解
2016/01/14 Javascript
浅析JavaScript Array和string的转换(推荐)
2016/05/20 Javascript
AngularJs中Bootstrap3 datetimepicker使用实例
2016/12/13 Javascript
浅谈DOM的操作以及性能优化问题-重绘重排
2017/01/08 Javascript
BootStrap表单宽度设置方法
2017/03/10 Javascript
Vue异步组件使用详解
2017/04/08 Javascript
vue监听滚动事件实现滚动监听
2017/04/11 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
JS鼠标3次点击事件实现代码及扩展思路
2017/09/12 Javascript
基于Vue中点击组件外关闭组件的实现方法
2018/03/06 Javascript
vue axios请求拦截实例代码
2018/03/29 Javascript
JS拖拽排序插件Sortable.js用法实例分析
2019/02/20 Javascript
使用Vue父子组件通信实现todolist的功能示例代码
2019/04/11 Javascript
python发送邮件示例(支持中文邮件标题)
2014/02/16 Python
python连接mysql调用存储过程示例
2014/03/05 Python
零基础写python爬虫之抓取百度贴吧代码分享
2014/11/06 Python
python读取.mat文件的数据及实例代码
2019/07/12 Python
python中seaborn包常用图形使用详解
2019/11/25 Python
打印tensorflow恢复模型中所有变量与操作节点方式
2020/05/26 Python
微软美国官方网站:Microsoft美国
2018/05/10 全球购物
JD Sports澳洲官网:英国领先的运动鞋和运动时尚零售商
2020/02/15 全球购物
德国便宜的宠物店:Brekz.de
2020/10/23 全球购物
公司清洁工岗位职责
2013/12/14 职场文书
年终奖发放方案
2014/06/02 职场文书
python高温预警数据获取实例
2022/07/23 Python