一位同事向我展示了以下代码并问我为什么它有效。
<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>
我解释过,当浏览器解析文档时,会使用元素 id 的名称将一个属性附加到 window 对象,然后该文档包含对相应 dom 节点的引用。有点像window.myspan = document.getElementById("myspan")
当页面渲染时在幕后调用。
在接下来的讨论中我们提出了一些问题:
window 对象和大部分 DOM 不是官方 JavaScript/ECMA 标准的一部分,但是上述行为是否记录在任何其他官方文献中,也许与浏览器相关?
上面的代码在浏览器(至少是主要竞争者)中有效,因为有一个 window 对象,但在像 rhino 这样的浏览器中失败了。编写依赖于此的代码是否被认为是不好的做法,因为它对执行环境做出了太多假设?
是否有任何浏览器会导致上述情况失败,或者这是否被视为全面的标准行为?
这里有人知道这些问题的答案并愿意启发我吗?我尝试了快速的互联网搜索,但我承认我不确定如何正确地表达查询。欢迎提供参考资料和文档。
这是仅适用于 IE 的非标准行为,不应使用。
[1] http://webbugtrack.blogspot.com/2007/09/bug-162-global-namespace-pollution-in.html [2] https://developer.mozilla.org/en/Migrate_apps_from_Internet_Explorer_to_Mozilla#section_7 [3] http://my.opera.com/hallvors/blog/show.dml/16388
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)