"ReferenceError: Can' T find variable: google" auf die überprüfung für nicht definierte
Ich dachte, ich hatte Javascript schon ziemlich viel herausgefunden, dann ist dies (scheinbar basic), was herausspringt:
Ich habe eine Phonegap /jQuery Mobile-app, Google Maps. Wenn die Telefon-internet-Verbindung ist nicht verfügbar, kurz, und an die genaue Zeit, die app versucht zu laden der Google Maps API nach app-start-up, die alle Karten Verwandte Funktionen natürlich nicht funktionieren.
Aber komisch ist dieser code bewirkt, dass die Funktion, die es in die Pause und stop die Ausführung der Vergangenheit, wenn der check (im Sinne der doSomething()
Zeile wird nie ausgeführt):
function myFunction() {
if(google === undefined) {
alert("Google Maps didn't load!");
}
doSomething();
}
Wenn man die Konsole in Safari-Entwickler-tools sehe ich den Fehler in diesem post-Titel.
Nicht überprüft, für nicht definierte Variablen, wie soll das sicher sein? Ich möchte zu handhaben, edge-Fall, wo die Google-Maps-API nicht geladen, aber wie kann ich tun, wenn ich kann nicht überprüfen, für nicht definierte? Ich versuchte nur zu tun if(!google)
, aber das gab das gleiche Ergebnis.
Habe ich auch versucht, mit der er Google Loader zum laden des maps-API dynamisch, wenn der Benutzer navigiert zu einer Seite mit Karten, aber ich habe nicht in der Lage gewesen, um das zu bekommen, zu arbeiten (Loader hätte Sie dynamisch geladen werden, sowie für diese zu helfen, und ich kann nicht scheinen, um in der Lage sein, um dynamisch zu laden-script). Ich habe versucht, es zu tun, die dynamisch mit reinem Javascript auch, aber ich denke, die document.write
im Google Maps API-Javascript ist zu brechen, dass auf Mobile Safari. Ich habe auch versucht, mit jQuery $.getScript()
ohne Erfolg.
In jedem Fall, ich sollte in der Lage sein, dies zu behandeln edge-Fall, wenn ich erkennen kann, dass die maps-API wurde nicht geladen, also es läuft alles darauf: Wie kann das sein und warum nicht den oben genannten undefined prüfen die Arbeit?
- Versuchen
if (typeof google === "undefined") {
- Danke, das hat funktioniert. Ich werde die Schuld am späten Freitag Nachmittag für die Vernachlässigung, dies zu betrachten. Ich verwendet, um den typeof-operator verwenden, die ganz ein bisschen, aber JSLint und andere Programmierer beschwerte sich die ganze Zeit, also habe ich einfach komplett aufgehört, es.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Versuchen Sie dies:
Weil
google
wird interpretiert als ein nicht deklarierter Bezeichner ist, in der Erwägung, dasswindow.google
ist eine Eigenschaft vonwindow
werden könnteundefined
oder nicht.EDIT:
Können Sie auch
!window.google
, dagoogle
ist ein Objekt und kann deshalb auch nichtnull
,undefined
,0
noch andere falsy-Werte.typeof
, und beim testen eine Objekt-Eigenschaft kann man den test direkt gegenundefined
- zumindest in Mobile Safari.undefined
, aberundefined
technisch ist nicht ein reserviertes Wort, und könnte gesetzt werden, als etwas anderes, bricht Vergleiche (wahrscheinlich etwas, was Sie sollten sich keine sorgen machen). Mittypeof
garantiert Ertrag das Ergebnis Sie brauchen. Die Art und Weise, sollten Sie testen, für Existenz von Objekt-Eigenschaften ist mitin
(oderhasOwnProperty
), wieif ("google" in window)
. Technisch, Sie konnte einfachif (window.google)
. Ich mag es einfach, stick mit etwas, das funktioniert in jedem Szenario -typeof
typeof === "undefined"
hat nicht funktioniert, das ist der Grund, warum ich aufgehört, es. Mir wurde gesagt, dassmyVar === undefined
war der zuverlässigste test. Und ja, ich benutze immerfor..in
undhasOwnProperty
zum testen für das Vorhandensein einer Eigenschaft.typeof console.log
(wenn die Developer-Tools geöffnet ist), ist "Objekt", nicht "funktionieren".typeof
, aber soweit ich mich erinnern kann das einzige mal, es hat nicht funktioniert, zumindest nicht annähernd zuverlässig, war mittypeof someVar === "undefined"
.JS
Sorge.