我在维护的一些代码中找到了这些行,这些代码在7和8中失败了。单步执行构造函数,我可以看到所有代码都正常执行。但是,当构造函数返回时,我得到一个“对象不支持此属性或方法”错误。 WTF?
需要注意的一点是,变量embedDialog具有全局范围(我知道全局变量是邪恶的,但我没有编写此代码)。
// Results in "Object does not support this property or method in ie8 and ie7
embedDialog = new Dialog({
id: "embedDialog",
width: 400,
height: 400,
message: "Check it out",
title: 'Cool dialog box'
});
如果我给embedDialog功能范围,那么它可以工作:
// Eliminate global scope and it works
var embedDialog = new Dialog({
id: "embedDialog",
width: 400,
height: 400,
message: "Check it out",
title: 'Cool dialog box'
});
修复它的另一种方法是将id属性的值更改为变量名称以外的值,如下所示:
// Change "embedDialog" to "embedDialogBox" and voila it works
embedDialog = new Dialog({
id: "embedDialogBox",
width: 400,
height: 400,
message: "Check it out",
title: 'Cool dialog box'
});
IE到底有什么问题?谁能解释为什么原始代码会破坏IE 7/8?
答案 0 :(得分:2)
如果“Dialog()”构造函数使DOM元素具有“id”值(与全局变量相同),那么IE会生成一个具有该名称的全局符号(显然与您的变量冲突)并使其成为引用DOM元素。您的代码可能希望它是一个“Dialog”实例。