我有一个继承自ActiveXObject的Javascript对象/类。但是当我在Internet Explorer(版本8)中运行代码时,我得到了这个奇怪的错误。
错误是:“对象不支持此属性或方法”
你能告诉我这个错误是什么意思吗?如何解决这个错误?
我的代码是:
function XMLHandler( xmlFilePath )
{
this.xmlDoc = null;
this.xmlFile = xmlFilePath;
this.parseXMLFile( this.xmlFile );
this.getXMLFile = function()
{
return this.xmlFile;
}
}
XMLHandler.prototype = new ActiveXObject("Microsoft.XMLDOM");
XMLHandler.prototype.constructor = ActiveXObject; // Error occurs here in IE. The error is: "Object doesn't support this property or method"
XMLHandler.prototype.parseXMLFile = function( xmlFilePath ) // If I comment out the above line then the exact same error occurs on this line too
{
this.xmlFile = xmlFilePath;
this.async="false"; // keep synchronous for now
this.load( this.xmlFile );
}
答案 0 :(得分:1)
错误对我来说非常明显。你做的是:
var x = new ActiveXObject("Microsoft.XMLDOM");
x.extendIt = 42;
它抛出一个(含糊的)错误,说你不能用新属性扩展ActiveXObject的实例。
现在ActiveXObject是一个宿主对象,并且已知它们充满了未定义的行为。不要延长它。而是使用它。
var XMLHandler = {
XMLDOM: new ActiveXObject("Microsoft.XMLDOM"),
parseXMLFile: function(xmlFilePath) {
this.xmlFile = xmlFilePath;
this.XMLDOM.load(xmlFilePath);
},
getXMLFile: function () {
return this.xmlFile;
}
};
var xmlHandler = Object.create(XMLHandler);
xmlHandler.parseXMLFile(someFile);
(我修复了你的代码,你需要一个ES5垫片来支持传统平台)。
当然,如果您现在查看代码,可以看到您无缘无故地为.load
创建了代理。您也可以直接使用XMLDOM对象。