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 相关文章推荐
几个高效,简洁的字符处理函数
Apr 12 Javascript
JQuery 入门实例1
Jun 25 Javascript
getAsDataURL在Firefox7.0下无法预览本地图片的解决方法
Nov 15 Javascript
开发中可能会用到的jQuery小技巧
Mar 07 Javascript
jquery中ajax处理跨域的三大方式
Jan 05 Javascript
BootStrap glyphicons 字体图标实现方法
May 01 Javascript
require.js+vue开发微信上传图片组件
Oct 27 Javascript
ES6中Class类的静态方法实例小结
Oct 28 Javascript
JavaScript实现单例模式实例分享
Dec 22 Javascript
vue router带参数页面刷新或回退参数消失的解决方法
Feb 27 Javascript
解决LayUI加上form.render()下拉框和单选以及复选框不出来的问题
Sep 27 Javascript
基于Vue实现微前端的示例代码
Apr 24 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开发大型项目的一点经验
2006/10/09 PHP
搜索和替换文件或目录的一个好类--很实用
2006/10/09 PHP
php带密码功能并下载远程文件保存本地指定目录 修改加强版
2010/05/16 PHP
10个简化PHP开发的工具
2014/12/25 PHP
PHPExcel在linux环境下导出报500错误的解决方法
2017/01/26 PHP
jquery-easyui关闭tab自动切换到前一个tab
2010/07/29 Javascript
父页面显示遮罩层弹出半透明状态的dialog
2014/03/04 Javascript
jQuery选择器简明总结(含用法实例,一目了然)
2014/04/25 Javascript
jquery插件之定时查询待处理任务数量
2014/05/01 Javascript
javascript实现点击按钮让DIV层弹性移动的方法
2015/02/24 Javascript
javascript实现显示和隐藏div方法汇总
2015/08/14 Javascript
jQuery实现选项卡切换效果简单演示
2015/12/09 Javascript
Bootstrap Chart组件使用教程
2016/04/28 Javascript
玩转JavaScript OOP - 类的实现详解
2016/06/08 Javascript
jQuery实现的选择商品飞入文本框动画效果完整实例
2016/08/10 Javascript
JavaScript简单下拉菜单特效
2016/09/13 Javascript
nodeJS实现简单网页爬虫功能的实例(分享)
2017/06/08 NodeJs
vue2.0+ 从插件开发到npm发布的示例代码
2018/04/28 Javascript
微信小程序分享海报生成的实现方法
2018/12/10 Javascript
nodejs+koa2 实现模仿springMVC框架
2020/10/21 NodeJs
python中实现延时回调普通函数示例代码
2017/09/08 Python
python实现按长宽比缩放图片
2018/06/07 Python
浅谈python连续赋值可能引发的错误
2018/11/10 Python
python实现石头剪刀布程序
2021/01/20 Python
python 一个figure上显示多个图像的实例
2019/07/08 Python
Python3环境安装Scrapy爬虫框架过程及常见错误
2019/07/12 Python
django项目简单调取百度翻译接口的方法
2019/08/06 Python
python线程的几种创建方式详解
2019/08/29 Python
python实现单目标、多目标、多尺度、自定义特征的KCF跟踪算法(实例代码)
2020/01/08 Python
分布式全文检索引擎ElasticSearch原理及使用实例
2020/11/14 Python
CSS3 滤镜 webkit-filter详细介绍及使用方法
2012/12/27 HTML / CSS
伊莱克斯(Electrolux)俄罗斯网上商店:瑞典家用电器品牌
2021/01/23 全球购物
JSF的标签库有哪些
2012/04/27 面试题
俄语专业毕业生推荐信
2013/10/28 职场文书
四下基层实施方案
2014/03/28 职场文书
2015年环卫处个人工作总结
2015/07/27 职场文书