Javascript 在Windows XP或2003上检索IE 8上的对象数据时出现问题

Javascript 在Windows XP或2003上检索IE 8上的对象数据时出现问题,javascript,Javascript,这是我在WindowsXP和Windows2003上使用JavaScript和IE8面临的一个有趣问题。我在页面上创建一个对象,然后检索有关该对象的信息(例如,其版本)。尝试获取版本时,我运行以下代码: var myObject = document.getElementById(objectId); console.log(myObject.version); 有趣的是,除了WindowsXP和2003上的IE8之外,这段代码适用于所有浏览器。我做了一些调试,这就是事情变得有趣的地方 myO

这是我在WindowsXP和Windows2003上使用JavaScript和IE8面临的一个有趣问题。我在页面上创建一个对象,然后检索有关该对象的信息(例如,其版本)。尝试获取版本时,我运行以下代码:

var myObject = document.getElementById(objectId);
console.log(myObject.version);
有趣的是,除了WindowsXP和2003上的IE8之外,这段代码适用于所有浏览器。我做了一些调试,这就是事情变得有趣的地方

myObject不为null,但myObject.version未定义。我所做的是在两者之间添加了一个警报,代码如下:

var myObject = document.getElementById(objectId);
alert(myObject.version);
console.log(myObject.version);
警报将导致“未定义”,但是,console.log现在将导致实际版本。如果我在此警报之前添加了任何警报(比如警报(“某物”)),那么第二个警报现在具有实际版本。我假设这是一个时间问题(出于某种原因,对象需要一些时间才能提供存储在其中的数据?),但我不确定这是什么样的时间问题,或者如何解决它


抱歉,描述太长,但非常感谢您的帮助。

document.getElementById不返回对象。它返回一个DOM元素。因此,您希望在DOM元素中看到一个.version属性,而官方W3C规范中缺少该属性(或者至少我不知道这一点)

我不确定您希望在.version中看到什么,但如果它是自定义对象,则应创建如下自定义对象:

var o = { version: "..." }
console.log(o);
你说这可能是个时间问题。如果这是真的,那么我建议在DOM完全加载后尝试访问.version属性。您可以将jQuery用于以下目的:

$(document).ready(function() {
   var myObject = document.getElementById(objectId);
   alert(myObject.version);
   console.log(myObject.version);
});
您可以在函数中添加setTimeout,直到有.version属性为止

var f = function(callback) {

   var check = function() {
       var myObject = document.getElementById(objectId);
       alert(myObject.version);
       console.log(myObject.version);
       if(typeof myObject.version !== "undefined") {
           callback(myObject.version);
       } else {
           setTimeout(check, 1000);
       }
   }

   setTimeout(check, 1000);

}

如果将带有js代码的
..
标记放在html文件的末尾,会发生什么情况?在我看来,代码是在DOM未就绪时执行的。如果你把它放在最后,那么它将在加载后执行。

对象的类型是什么?Flash还是一个DOM元素?如果是与时间相关的问题,您可能应该使用
setTimeout
。根据您的
myObject
所指的元素,这可能非常正常
alert
被阻止,因此浏览器有机会完成检索周期,而您的第一个表单要求浏览器立即响应。回答qeremy的问题:它是一个DOM对象。至于路人的评论,问题是,例如添加一个超时是没有用的。什么是正确的超时?如果需要更多的时间呢?什么是正确的方法才能真正做到这一点?这是什么
版本
?DOM对象通常不具有此属性。版本是在创建此对象时添加的自定义属性。唯一的问题是该函数由外部javascript函数调用。换句话说,它是从外部调用的,因此添加此就绪语句在我的情况下不起作用。您说过。版本在某些浏览器中起作用。返回的值是多少。它是浏览器的版本还是?不是,它是对象本身的版本。例如,假设对象本身的版本(代表浏览器插件的版本)为2.0,那么它将返回2.0.Aham。。。因此,外部库可能会在某个时候添加此属性。我建议在该外部源之前包含另一个文件,该文件将此属性设置为类似“0”的值。所以,至少您的外部javascript函数可以正常工作。所以问题是0不能工作,我理解这个建议,但问题是如果我没有得到一个版本,比如说>1.5,我将不得不显示与我得到的版本完全不同的信息。你是对的,这个版本是从外部添加的,但我唯一的问题是我不能一直等待(设置一个超时),因为它可能需要1秒,可能需要3或4秒,对吗?