JavaScript窗口对象元素属性

时间:2010-05-11 18:54:43

标签: javascript cross-platform rhino

一位同事向我展示了以下代码,并问我为何有效。

<span id="myspan">Do you like my hat?</span>
<script type="text/javascript">
var spanElement = document.getElementById("myspan");
alert("Here I am! " + spanElement.innerHTML + "\n" + myspan.innerHTML);
</script>

我解释说,当浏览器解析文档然后包含对相应dom节点的引用时,属性附加到窗口对象,并带有元素id的名称。它就像在渲染页面时在幕后调用window.myspan = document.getElementById("myspan")一样。

随后的讨论我们提出了一些问题:

  • 窗口对象和大部分DOM都不是官方JavaScript / ECMA标准的一部分,但是上述行为是否记录在任何其他官方文献中,可能与浏览器相关?

  • 以上工作在浏览器中(至少是主要的竞争者),因为有一个窗口对象,但是像rhino这样的东西失败了。编写依赖于这种被认为是不好的做法的代码,因为它对执行环境做了太多假设吗?

  • 上述任何浏览器都会失败,或者这被认为是全面的标准行为?

有谁在这里知道这些问题的答案,并愿意启发我吗?我尝试了一个快速的互联网搜索,但我承认我不确定如何正确地说出查询。欢迎提供参考文献和文​​件。

2 个答案:

答案 0 :(得分:3)

这是一种非标准的IE行为,不应使用。

[1] [2] [3]

答案 1 :(得分:1)

这不是标准功能,仅受IE支持,在某些情况下仅支持Opera。它也可能受浏览器是否位于quirks mode以及该元素是否具有name属性的影响。

到第二点,rhino本身不包含DOM实现,因此该问题不适用。也就是说,没有内置的HTML解释器,因此不会有其他变量。

env.js是rhino的DOM实现,提供HTML解释器。由于作为window范围变量的ID不是Web标准,并且env项目旨在符合标准,因此您不会在那里看到所描述的行为。

希望这有帮助!