How can I check whether Google Maps is fully loaded?

How can I check whether Google Maps is fully loaded?

I’m embedding Google Maps into my web site. Once Google Maps is loaded, I need to kick off a few JavaScript processes.
Is there a way to auto-detect when Google Maps has fully loaded, including tile downloads and all?
A tilesloaded() method exists that is supposed to accomplish exactly this task but it does not work.

Solutions/Answers:

Solution 1:

This was bothering me for a while with GMaps v3.

I found a way to do it like this:

google.maps.event.addListenerOnce(map, 'idle', function(){
    // do something only the first time the map is loaded
});

The “idle” event is triggered when the map goes to idle state – everything loaded (or failed to load). I found it to be more reliable then tilesloaded/bounds_changed and using addListenerOnce method the code in the closure is executed the first time “idle” is fired and then the event is detached.

See also the events section in the Google Maps Reference.

Solution 2:

I’m creating html5 mobile apps and I noticed that the idle, bounds_changed and tilesloaded events fire when the map object is created and rendered (even if it is not visible).

To make my map run code when it is shown for the first time I did the following:

google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
    //this part runs when the mapobject is created and rendered
    google.maps.event.addListenerOnce(map, 'tilesloaded', function(){
        //this part runs when the mapobject shown for the first time
    });
});

Solution 3:

If you’re using the Maps API v3, this has changed.

In version 3, you essentially want to set up a listener for the bounds_changed event, which will trigger upon map load. Once that has triggered, remove the listener as you don’t want to be informed every time the viewport bounds change.

This may change in the future as the V3 API is evolving 🙂

Solution 4:

If you’re using web components, then they have this as an example:

map.addEventListener('google-map-ready', function(e) {
   alert('Map loaded!');
});

Solution 5:

In 2018:

var map = new google.maps.Map(...)
map.addListener('tilesloaded', function () { ... })

https://developers.google.com/maps/documentation/javascript/events

Solution 6:

GMap2::tilesloaded() would be the event you’re looking for.

See GMap2.tilesloaded for references.