最近需要在项目中使用在线HTML编辑器编辑shell脚本,找了几个开源的js库发现codemirror非常轻量级且好用,最近的版本中已经加入了shell的支持,并且支持绝大多数主流的编程语言。但是在ie下调用codemirror提供的shell.js脚本库的时候无法正常使用,调试bug发现都卡在atoms.indexOf这个方法上。
if (stream.peek() === '=' && /\w+/.test(cur)) return 'def';
if (atoms.indexOf(cur) !== -1) return 'atom';
if (commands.indexOf(cur) !== -1) return 'builtin';
if (keywords.indexOf(cur) !== -1) return 'keyword';
搜索了下发现是ie下对数组不能直接使用indexof方法,于是借鉴此文:
http://blog.csdn.net/x123jing/article/details/7064312
的方法在代码头部加上了:
if(!Array.indexOf)
{
Array.prototype.indexOf = function(obj)
{
for(var i=0; i<this.length; i++)
{
if(this[i]==obj)
{
return i;
}
}
return -1;
}
}
于是问题解决,ie,ff,chrome都能正常使用了!