Your best bet is html5 geolocation + modernizr.js + a shim. Browsers that support html5 geolocation will return highly accurate results while those that don't support it will fall back to calling the google maps api (ip to geo).
https://github.com/Modernizr/Modernizr/wiki/HTML5-Cross-Brow...