我遇到了这个问题。我有一个脚本,检查变量是否存在,因为一些脚本是异步加载的,比如Facebook的FB或Twitter的twttr。
function whenAvailable(name, callback, interval) {
interval || (interval = 100); // ms
window.setTimeout(function() {
if ((window.hasOwnProperty && window.hasOwnProperty(name)) || window[name] || !!eval(name)) {
return callback();
} else {
window.setTimeout(arguments.callee, interval);
}
}, interval);
}
看起来是这样的
if ((window.hasOwnProperty && window.hasOwnProperty(name)) || window[name] || !!eval(name))
不起作用。IE会对eval(name)抛出错误 ——例如,如果name = 'FB',它会说无法评估'FB',因为它未定义。
如果name == 'twttr.widgets'
,则window.hasOwnProperty(name)
不起作用。
是否有一种通用且跨浏览器的方法来检查变量名存在?
twttr.widgets
的变量。可以有一个名为twttr
的变量,它可能有一个属性widgets
,但希望您能看到这不是简单的“此属性是否存在”。 - Garethwindow
里肯定可以有一个叫做twttr.widgets
的属性。虽然这很不寻常,但完全是合法的。window['twittr.widgets'] = "foo";
。 - T.J. Crowder