Ich schreibe eine App, die Google Maps asynchron mit einem von Hand erstellten Framework lädt.
Wenn ich Karten lade, wird es aus irgendeinem Grund nicht geladen und ich werde mit einem Uncaught TypeError: undefined is not a function
enden. Ich habe den Chrom-Inspektor überprüft und herausgefunden, dass google.maps
ein gültiges Objekt ist, aber es hat keine eigenen Eigenschaften. Ich rufe manuell die "Initialisierungsfunktion" auf, nachdem das Dokument geladen wurde. Was mache ich falsch?!Async Google Maps API v3 undefined ist keine Funktion
Antwort
Sie können die Karten-API asynchron mit der bekannten URL laden (http://maps.googleapis.com/maps/api/js?v=3&sensor=false)
Wenn Sie einen Blick auf die Skript-Datei nehmen, werden Sie sehen, dass dies nicht der API ist, dass wird geladen, es ist ein Loader, der die API lädt. Der Lader verwendet document.write()
, was zu unerwarteten Ergebnissen führt, wenn er nach dem Laden des Dokuments aufgerufen wird.
Außerdem wartet das Onload-Ereignis des Dokuments nicht auf asynchrone geladene Objekte, es kann zu schnell kommen.
Sie können auch nicht das load-event des Skripts verwenden, um die initialize-Funktion aufzurufen, da beim Laden der Loader geladen wird, nicht die maps-API.
Was ist zu tun:
einen Rückruf-Parameter an das Skript-URL anhängen (mit dem Namen der initialize-Funktion als Wert)
http://maps.googleapis.com/maps/api/js?v=3&sensor=false&callback=initialize
Sie jetzt einen anderen Lader erhalten die :
- verwendet nicht
document.write()
- den Rückruf-functi ruft auf (initialisieren), wenn die Karten-API
Demo geladen ist: http://jsfiddle.net/doktormolle/7cu2F/
Im Zusammenhang mit dem Kommentar: scheint der Rückruf sein muss, eine Funktion an Fenstern direkt. nicht cool google :)
Es gibt eine andere Option, the google-API-loader, die die Verwendung von Funktionsreferenzen (anstelle von Funktionsnamen) unterstützt.
Probe, die das Karten-API asynchron geladen, aber nur, wenn es ein Element mit der ID map-canvas
in dem Dokument, und erstellt dann eine Karte:
window.addEventListener('load',function(){
if(document.getElementById('map-canvas')){
google.load("maps", "3",{
callback:function(){
new google.maps.Map(document.getElementById('map-canvas'), {
center: new google.maps.LatLng(0,0),
zoom: 3
});
}
});
}
},false);
body,html,#map-canvas{
height:100%;
margin:0;
padding:0;
width:100%;
}
<script src="https://www.google.com/jsapi?.js"></script>
<div id="map-canvas"></div>
Ok danke für das inf O. Ich wollte nicht 'callback = initialize 'verwenden, weil ich einige zusätzliche Argumente in der Initialize-Funktion übergeben wollte, aber ich denke, dass ich es umgehen muss. – Stephen
Dies ist genau das, was ich gesucht habe – Stephen
scheint der 'Callback' muss eine Funktion an Fenster direkt angeschlossen werden. nicht cool google :) – apneadiving
- 1. Google Maps Api v3 - getBounds ist undefined
- 2. Google Maps API v3 BrowserIsCompatible
- 3. google maps api v3 keine etiketten?
- 4. Google Maps v3 API JS async - mehrere Marker infowindow Wordpress
- 5. Google Maps API v3: Zeichnungsmanager
- 6. Google Maps API v3 Gemeindegrenze
- 7. Google Maps JavaScript API v3
- 8. Google Maps API v3 Markerkoordinaten
- 9. Google Map API V3- MarkerClusterer undefined
- 10. Google Maps API: TypeError: a ist undefined
- 11. Google Maps v3 Fehler
- 12. Was ist der API-Schlüssel für Google Maps API V3?
- 13. Google Maps v3 API - Auto Complete (Adresse)
- 14. Google Maps API v3 addDomListener-Methode Fragen?
- 15. Problem mit Google Maps API v3
- 16. Erlaubt Google Maps API v3 größere Zoomwerte?
- 17. jqtouch/google maps api v3 ausgabe
- 18. Google Maps v3 API mouseover mit Polygonen?
- 19. Google Maps API v3: Kartentyp ändern Ereignis
- 20. Google Maps API v3 Problem mit Firefox
- 21. Google maps api v3 Suchpolygon ohne Mausereignisse
- 22. Google Maps API V3 Graue Bereiche
- 23. Google Maps API V3 - Benutzerdefinierte Fliesen
- 24. Google Maps API V3-Methode fitBounds()
- 25. Google Maps Api v3, benutzerdefiniertes Cluster-Symbol
- 26. Google Maps MarkerLabel ist keine Funktion
- 27. Google Maps API v3 - GIcon ist nicht definiert
- 28. Google Maps v3 OverlayView.getProjection()
- 29. Google Earth mit Google Maps API v3 integriert?
- 30. Google Maps v3 Sidebar Links
Vielleicht hat einige Codes (Ihr "handgebautes Framework wäre ein Anfang)? Ein Link zu einer Seite, die das Problem aufweist? Eine Datei, die tut? – geocodezip
Das Lesen der Dokumentation ist ein guter Anfang [** Siehe **] (https: // Entwickler. google.com/maps/documentation/javascript/tutorial#asynch) –