在使用 seajs做项目,今天偶然发现在ie9以下的ie版本会 报出 对象不支持charAt 属性。刚开始还以为是自己写的js部分出了问题,经过几个小时的奋战。最终找到了其根源。在sea-debug.js的源码中有个normalize(path)方法。源码如下:
function normalize(path) { var last = path.length - 1 var lastC = path.charCodeAt(last) // If the uri ends with `#`, just return it without ‘#‘ if (lastC === 35 /* "#" */) { return path.substring(0, last) } return (path.substring(last - 2) === ".js" || path.indexOf("?") > 0 || lastC === 47 /* "/" */) ? path : path + ".js" }
normalize(path),方法里有path.charCodeAt(last),这句。问题就出在这里,charCodeAt() 方法可返回指定位置的字符的 Unicode 编码。这个返回值是 0 - 65535 之间的整数。 charCodeAt()这主方法本身是不会出错的,错的可能性只能 path 是这个参数。只要把path强行toString()。就可以解决这个报错了。修改后代码如下:
function normalize(path) { var path=path.toString() var last = path.length - 1 var lastC = path.charCodeAt(last) // If the uri ends with `#`, just return it without ‘#‘ if (lastC === 35 /* "#" */) { return path.substring(0, last) } return (path.substring(last - 2) === ".js" || path.indexOf("?") > 0 || lastC === 47 /* "/" */) ? path : path + ".js" }
希望对中坑的人有所帮助!
时间: 2024-11-08 23:59:14