如何通过 JavaScript 动态添加 Google Maps API?

use*_*162 5 javascript jquery google-maps

我正在尝试在只能通过外部 javascript 文件进行编辑的页面上使用 Google Maps API。问题是,当我尝试使用 getScript 动态加载 Google Maps API 时,它不会加载。

有没有办法动态加载Google Maps API?

这有效:

http://jsfiddle.net/2XVKL/2/

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false"></script>

<script>
function codeAddress() {

    new google.maps.Geocoder().geocode({'address':document.getElementById('address').value}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

            alert('worked!');

        } 

    });

}
</script>

<body>
    <input id="address" type="textbox" value="Sydney, NSW">
    <input type="button" value="Submit" onclick="codeAddress()">
</body>
Run Code Online (Sandbox Code Playgroud)

但我需要仅使用 javascript 动态加载 api,如下所示:

http://jsfiddle.net/2XVKL/3/

<script>
$("document").ready(function () {

    $.getScript("https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false");

});


function codeAddress() {

    new google.maps.Geocoder().geocode({'address':document.getElementById('address').value}, function(results, status) {

        if (status == google.maps.GeocoderStatus.OK) {

            alert('worked!');

        } 

    });

}
</script>

<body>
    <input id="address" type="textbox" value="Sydney, NSW">
    <input type="button" value="Submit" onclick="codeAddress()">
</body>
Run Code Online (Sandbox Code Playgroud)

编辑:在这里找到解决方案 - https://gist.github.com/jorgepedret/2432506

Bla*_*ger 1

根据Google 的说明,您必须添加&callback=initialize到您的网址:

$.getScript("https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=initialize");
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/mblase75/dErNs/


然而,为了完全安全,您应该使用.done()让您的函数等到.getScript()完成:

$(document).ready(function () {
    window.gmap_async = $.getScript("https://maps.googleapis.com/maps/api/js?v=3.exp&sensor=false&callback=initialize");
    // global Deferred variable
});

function codeAddress() {
    window.gmap_async.done(function () {
        new google.maps.Geocoder().geocode({
            'address': document.getElementById('address').value
        }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                alert('worked!');
            }
        });
    });
}
Run Code Online (Sandbox Code Playgroud)

http://jsfiddle.net/mblase75/dErNs/1/