Ich habe dieses Problem. Ich habe ein Skript, das prüft, ob eine Variable existiert, weil einige Skripte asynchron laden, wie FB für Facebook oder twttr für Twitter.JavaScript: Wie überprüft man, ob eine Variable nach dem Variablennamen existiert?
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);
}
Sieht aus wie diese
if ((window.hasOwnProperty && window.hasOwnProperty(name)) || window[name] || !!eval(name))
funktioniert nicht. IE löst Fehler für Eval (Name) - z. Wenn name = 'FB', heißt es, dass 'FB' nicht definiert werden kann, was undefiniert ist.
window.hasOwnProperty(name)
funktioniert nicht, wenn name == 'twttr.widgets'
.
Gibt es eine universelle und Cross-Browser-Prüfung auf Existenz von var by var name?
kurze Frage, existieren diese Variablen immer in den Skripten geladen? – Joseph
Es darf keine Variable namens "twttr.widgets" geben. Es kann eine Variable mit dem Namen 'twttr' geben, die eine Eigenschaft' Widgets' hat, aber hoffentlich sieht man, dass es nicht so einfach ist wie "existiert diese Eigenschaft". – Gareth
Joseph - nein, sie könnten niemals existieren. Gareth - technisch haben Sie Recht, aber was ich wollte, muss auch mit Eigenschaften arbeiten. –