如何解决窗口对象在Chrome和IE中行为异常
| 考虑以下示例HTML:<div id=\"about\">
<!-- content here -->
</div>
和以下脚本
var about = (function ($,window,document) {
\"use strict\";
var methods;
methods = {
init: function () {
// Do things here
}
};
return methods;
} (jQuery,document));
此时应将变量“ 2”附加到“ 3”对象。
在Firefox(3.6.17)中,我可以编写
window[\"about\"]
如果尚未处理,则将返回undefined
,如果有,它将按我的预期返回对象。
但是,问题在于,Chrome和IE(7&8)中的相同代码window[\"about\"]
返回实际的HTML对象。在上面的示例中,它将返回以下内容:
<div id=\"about\">
<!-- content here -->
</div>
为什么会这样?
另外,有没有比使用window
元素更好的方法来检查about
对象是否可用?我意识到理想情况下,您不想垃圾窗口对象,但这是一个完全不同的问题。
谢谢
解决方法
WebKit浏览器似乎模仿了旧的IE行为,即将元素“ id”值视为3对象的属性。
我个人不喜欢这种行为。
,Chrome会将HTML中的所有ID转换为全局变量。您可以覆盖该分配,但是我认为您正在检查是否存在而不是覆盖?
http://jsfiddle.net/robert/Hnw7y/
,区分ѭ11和函数的一种方法是检查对象的类型:
if (typeof window.about === \'function\') {
// the \'about\' function has been defined
}
,不幸的是,您可以执行以下操作的唯一方法是:
function global(name) { return eval(name); }
if( global(\"about\") )
...
试试这个:http://jsfiddle.net/PMqPv/1/
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。