对象不支持此属性或方法


Language Message Browser Number
简体中文 对象不支持此属性或方法 IE -2146827850
繁体中文 物件不支援此屬性或方法
日文 オブジェクトでサポートされていないプロパティまたはメソッドです。
英文 Object doesn't support this property or method
俄文 Объект не поддерживает это свойство или метод
韩文 개체가 이 속성 또는 메서드를 지원하지 않습니다.
西班牙文 El objeto no acepta esta propiedad o método
波兰文 O objeto não dá suporte para a propriedade ou método
土耳其文 Nesne bu özellik veya yöntemi desteklemiyor
德文 Das Objekt unterstützt diese Eigenschaft oder Methode nicht.
法文 Cet objet ne gère pas cette propriété ou cette méthode
荷兰文 Deze eigenschap of methode wordt niet ondersteund door dit object

一般是将一个非 函数/方法 当作 函数/方法 调用时造成。 检查代码中是否有函数名与元素属性/属性同名的情况。

貌似 IE 专有异常,同样的代码其他浏览器的异常信息与此不同。

var a = {};
a.a();
Browser Message
IE 对象不支持此属性或方法
Firefox a.a is not a function
Opera 'a.a' is not a function
Safari 'undefined' is not a function
Chrome Object # has no method 'a'

案例

商家帮助中心在接入点击热图时,发现IE8中搜索结果超出一页时(此时有翻页), 点击热点脚本计算 md5 部分的代码会报错『对象不支持此属性或方法』。

md5 算法本身的相关代码都是函数式编程,并无使用面向对象的部分,只有简单的 add() 函数调用,及数值位运算。运行时异常的参数部分也都无异常数据。

/* MD5 rounds functions */
function R1(A, B, C, D, X, S, T) {
    q = add(add(A, (B & C) | (~B & D)), add(X, T));
    return add((q << S) | ((q >> (32 - S)) & (Math.pow(2, S) - 1)), B);
}

最初以为是翻页部分的 HTML 标签不匹配,没有 <form> 起始标签,加上 <form> 标签果然没有异常了。

相关代码:

<div class="PageChanger">
    <img src="http://www.example.com/images/pre_page_simple.gif" alt="上一页" />
    <strong>1</strong>
    <a href="searchNewResult.htm?searchScope=BUSINESS&word=注册&page=2">2</a>
    <a href="searchNewResult.htm?searchScope=BUSINESS&word=注册&page=2">
        <img src="http://www.example.com/images/next_page_act.gif" alt="下一页" title="翻到下一页" /></a>
    <script language="javascript" type="text/javascript">
        //...
    </script>
    <input type="hidden" name="q" value="注册" />
    <input type="hidden" name="word" value="注册" />
    <input type="hidden" name="s" value="0" />
    <input type="hidden" name="n" value="10" />
</form>
</div>

但是另一个发现是,如果删除匹配的 <form> 起始&结束标签,保留这些 hidden 字段, 尤其是保留 name=q 的元素,仍然抛出异常。

再次检查 JavaScript 代码,发现函数中 q 未定义,成为全局变量, 在 IE8 中直接引用 input[name=q] 的元素,为其赋值时,抛出异常。

最小重现代码,属性名为 name 或 id 均抛异常:

<input name="a" />
<script type="text/javascript">
    a = 1;
</script>

相关异常

延伸阅读