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高级程序设计 学习笔记 js高级技巧
Sep 20 Javascript
关于jquery性能最佳实践的讨论,与求教
Mar 30 Javascript
jquerymobile checkbox及时刷新才能获取其准确值
Apr 14 Javascript
event.currentTarget与event.target的区别介绍
Dec 31 Javascript
jquery 动态创建元素的方式介绍及应用
Apr 21 Javascript
node.js中的fs.createReadStream方法使用说明
Dec 17 Javascript
jquery实现仿新浪微博带动画效果弹出层代码(可关闭、可拖动)
Oct 12 Javascript
jquery文字填写自动高度的实现方法
Nov 07 Javascript
js实现简单模态框实例
Nov 16 Javascript
微信小程序 调用远程接口 给全局数组赋值代码实例
Aug 13 Javascript
微信小程序绑定手机号获取验证码功能
Oct 22 Javascript
vuex的使用步骤
Jan 06 Vue.js
关于恒等于(===)和非恒等于(!==)
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
phpmyadmin操作流程
2006/10/09 PHP
PHP4实际应用经验篇(5)
2006/10/09 PHP
用来解析.htgroup文件的PHP类
2012/09/05 PHP
深入PHP异步执行的详解
2013/06/03 PHP
ThinkPHP行为扩展Behavior应用实例详解
2014/07/22 PHP
PHP命名空间(namespace)的动态访问及使用技巧
2014/08/18 PHP
PHPer 需要了解的 5 个 Composer 小技巧
2014/08/18 PHP
在PHP程序中使用Rust扩展的方法
2015/07/03 PHP
ThinkPHP静态缓存简单配置和使用方法详解
2016/03/23 PHP
Node.js入门教程:在windows和Linux上安装配置Node.js图文教程
2014/08/14 Javascript
js贪吃蛇游戏实现思路和源码
2016/04/14 Javascript
jQuery实用小技巧_输入框文字获取和失去焦点的简单实例
2016/08/25 Javascript
教你一步步用jQyery实现轮播器
2016/12/18 Javascript
原生js实现文件上传、下载、封装等实例方法
2020/01/05 Javascript
es6函数中的作用域实例分析
2020/04/18 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
vue 封装面包屑组件教程
2020/11/16 Javascript
[03:53]2016国际邀请赛中国区预选赛第三日TOP10精彩集锦
2016/06/29 DOTA
Windows下实现Python2和Python3两个版共存的方法
2015/06/12 Python
对python PLT中的image和skimage处理图片方法详解
2019/01/10 Python
python 实现提取某个索引中某个时间段的数据方法
2019/02/01 Python
python tkinter图形界面代码统计工具
2019/09/18 Python
Python双链表原理与实现方法详解
2020/02/22 Python
Python使用Paramiko控制liunx第三方库
2020/05/20 Python
python实现逻辑回归的示例
2020/10/09 Python
CSS3实现时间轴特效
2020/11/02 HTML / CSS
HTML5 Canvas鼠标与键盘事件demo示例
2013/07/04 HTML / CSS
优秀的个人求职信范文
2014/05/09 职场文书
平安家庭事迹材料
2014/12/20 职场文书
医德医风自我评价2015
2015/03/03 职场文书
2015年学生会个人工作总结
2015/04/09 职场文书
MySQL Threads_running飙升与慢查询的相关问题解决
2021/05/08 MySQL
一文搞懂redux在react中的初步用法
2021/06/09 Javascript
mysql聚集索引、辅助索引、覆盖索引、联合索引的使用
2022/02/12 MySQL
浅谈GO中的Channel以及死锁的造成
2022/03/18 Golang
一行Python命令实现批量加水印
2022/04/07 Python