解决seajs ie8 对象不支持charAt 属性。

在使用 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

解决seajs ie8 对象不支持charAt 属性。的相关文章

解决IE10以下对象不支持“bind”属性或方法

IE10一下的浏览器,如果在JS代码中用了bind函数,那么就会报“SCRIPT438: 对象不支持“bind”属性或方法” 因为浏览器没有提供这个参数的方法,所以我们就自己写一个bind,来让这个参数生效. //解决IE10以下不支持Function.bind if (!Function.prototype.bind) { Function.prototype.bind = function(oThis) { if (typeof this !== "function") { thr

关于使用jquery时,ie8下提示对象不支持的属性或方法的解决办法

转自:http://wapapp.baidu.com/auoong/item/538790fcbe87c834d7ff8cde 首先这个问题的前提是已经排除了常见的这个问题.下面说一种今天我碰到的一种情况. 浏览器报的错误: 1.在xp/win7系统下安装的是ie8的报的错误是:对象不支持此属性与方法. 2.在win8下报的错误是:对象不支持"toLowerCase"属性或方法,即使是调整成ie8模式也是这个错误. 出错的代码段为jquery的源代码,如下: var b=a.nodeN

jmail组件 对象不支持此属性或方法: 'JMail.ServerAddress' 的解决办法

jmail组件是asp最常用的邮件发送工具,自己有一个网站,已经使用这个jmail组件有8年了,但不知道为什么在12号突然出现无法正常发送邮件的问题, 后来经过测试代码,发现IIS报的错误为:对象不支持此属性或方法: 'JMail.ServerAddress',遇到不明白的,当然就是先度娘了,百度了2天都没有发现有相同错误的案例及解决的办法, 我的代码如下: Dim JMail Set JMail=Server.CreateObject("JMail.Message") if err

jquery1.8 在IE8 下面报错:对象不支持此属性或方法 return b.getAttribute("id")===a

jquery1.8 在IE8 下面报错: 对象不支持此属性或方法 调试发现是下面这一行报错: 在IE8下面报错,在chrome和firefox都是好的. 实在找不到原因,最后把源码改成下面这样: 没有报错了. 更好的方法,应该可以先 判断 elem 对象是否有 getAttribute() 这个函数,如果没有就是有 eleem["id"] 来代替.

解决对象不支持“getElementsByClassName”属性或方法 ie兼容性

  解决 IE 或者兼容模式不支持 document.getElementsByClassName() 的方法 自已实现document.getElementsByClassName(): 网页错误详细信息消息: 对象不支持此属性或方法 document.getElementsByClassName('element_name') 需要自己实现下该方法,因为ie5之前的版本并不支持这个方法 有以下四种方法,第四种兼容性最好  一. [javascript] view plaincopy   //

transport.js报hasOwnProperty对象不支持此属性

ECShop transport.js错误 这次出现的问题是transport.js在IE下提示对象不支持该用法.出现错误位置为608行的下面的代码: if(this.hasOwnProperty(k)){ 仔细看了一下代码,这个判断的主要作用应该是判断属性的.可能由于各浏览器的差异化,IE下就会出现不支持该用法的错误. 解决方法很简单,只要加多一个判断:if(this.hasOwnProperty&&this.hasOwnProperty(k)){ 就可以解决这个问题了. 究其原因在ie

ie7/8浏览器报错:对象不支持“trim”属性或方法

解决方法: 方法1: 使用jquery里面的全局函数$.trim()代替原生js方法trim(): $.trim( 你要替换的字符 ); 方法2: Function.prototype.method = function (name, func) { this.prototype[name] = func; return this; }; if (!String.prototype.trim) { //判断下浏览器是否自带有trim()方法 String.method('trim', funct

对象不支持ajax属性或方法

今天在做泛微流程开发的时候,遇到一件很奇怪的事情,流程流转到第二个节点,居然报错了,提示”对象不支持ajax属性和方法“,但是第一个节点测试并未报错了, /(ㄒoㄒ)/~~,然后试着把jQuery的简写“$"改成”JQuery“后,不在提示”对象不支持ajax属性和方法“错误,而是变成了“automation服务器不能创建对象”问题,看下了错误的代码 行”var xhr = window.ActiveXObject ? new ActiveXObject("Microsoft.XMLH

javascript错误:对象不支持此属性或方法

javascript错误:对象不支持此属性或方法 出现如上错误的原因主要有以下两种: 1.方法对应的JS函数未定义 2.属性所用的id名字跟函数名相同也会报此错误,id或函数名改个地方即可.