Javascript 窗口对象在Chrome和IE中行为奇怪
考虑以下示例HTML:Javascript 窗口对象在Chrome和IE中行为奇怪,javascript,Javascript,考虑以下示例HTML: <div id="about"> <!-- content here --> </div> 此时应将变量about附加到窗口对象 在Firefox(3.6.17)中,我能够编写 window["about"] 如果about还没有被处理,它将返回未定义的如果有,它将返回我所期望的对象 然而,问题是Chrome和IE(7&8)中的相同代码窗口[“about”]返回实际的HTML对象。根据上面的示例,它将返回以下内容: &l
<div id="about">
<!-- content here -->
</div>
此时应将变量about
附加到窗口
对象
在Firefox(3.6.17)中,我能够编写
window["about"]
如果about还没有被处理,它将返回未定义的如果有,它将返回我所期望的对象
然而,问题是Chrome和IE(7&8)中的相同代码窗口[“about”]
返回实际的HTML对象。根据上面的示例,它将返回以下内容:
<div id="about">
<!-- content here -->
</div>
function global(name) { return eval(name); }
if( global("about") )
...
为什么会发生这种情况
另外,与使用窗口元素相比,是否有更好的方法来检查和查看about
对象是否可用?我意识到理想情况下,人们不想把窗口对象弄脏,但这是一个完全不同的问题
谢谢,Chrome将接受HTML中的任何ID,并将其转换为全局变量。您可以覆盖作业,但我假设您正在检查是否存在,而不是覆盖作业
WebKit浏览器似乎模仿了旧的IE行为,将元素“id”值视为窗口的属性
我个人不喜欢这种行为。区分HTMLElement
和函数的一种方法是检查对象的类型:
if (typeof window.about === 'function') {
// the 'about' function has been defined
}
不幸的是,您可以这样做的唯一方法是:
<div id="about">
<!-- content here -->
</div>
function global(name) { return eval(name); }
if( global("about") )
...
试试这个:而不是窗口['about'],试试about
+1。“不要污染全局名称空间”的整个想法都付之一炬。因为像location
和document
这样的东西,它甚至不可靠。不喜欢就是低估了我对它的憎恨:)所以如果HTML5规范中有这样的东西。。。您建议我如何检查“about”的存在?您可以随时检查“about”作为DOM元素而不是函数的值。对,它已经存在了,因为Chrome将元素ID作为window.example=document.getElementById('example')