Quite often pages are overloaded with 3rd party APIs or widgets and page loading time becomes a bottleneck in user experience. In my project I need google maps support, but only if user selects one particular tab.

So how to load Google Maps V3 dynamicly, on button click or tab select

Main steps here are load maps API, wait for load, create map and wait for tiles to load.

# Load maps API

First step is to load javascript API. One important thing here is callback parameter. That function will be executed after API is fully loaded.

$.ajax({
   url: "http://maps.googleapis.com/maps/api/js?sensor=false&callback=MapApiLoaded",
   dataType: "script",
   timeout:8000,
   error: function() {
      // Handle error here
   }
});

# Create map object and wait for full load

Next, define function MapApiLoaded, good place to create map object and setup.

function MapApiLoaded() {
   // Create google map
   map = new google.maps.Map($('#gmap')[0], {
      zoom:8,
      mapTypeId:google.maps.MapTypeId.ROADMAP,
      panControl:false,
      streetViewControl:false,
      mapTypeControl:true
   });
   map.setCenter(new google.maps.LatLng(-1.950106, 29.873887999999965));

   // Add marker

   // Trigger resize to correctly display the map
   google.maps.event.trigger(map, "resize");

   // Map loaded trigger
   google.maps.event.addListenerOnce(map, 'idle', function () {
      // Fire when map tiles are completly loaded
   });
}