在运行时加载BingMaps API

问题描述:

我想在JavaScript文件运行时加载Bing Maps API。这是我到目前为止,根据this在运行时加载BingMaps API

var bingmap_link = 'https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario'; 
$.when(
    $.getScript(bingmap_link), 
    $.Deferred(function(deferred){ 
    $(deferred.resolve); 
    }) 
) 
.done(function() { 
    console.log("done"); 
    load_bing_map(); 
}); 

,但我会收到以下错误

TypeError: Microsoft.Maps.NetworkCallbacks.f_logCallbackRequest is not a function

于是,我又一次尝试:

$('head').append('<script type="text/javascript" src="https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario" async defer></script>'); 

load_bing_map(); 

但我在错误再次运行。

jQuery.Deferred exception: n is null [email protected]https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario:12:7416

在这两种情况下的load_bing_map()功能看起来像这样。

function load_bing_map() { 
    var map = new Microsoft.Maps.Map('#mymap', { 
    credentials: 'MyKey' 
    }); 
} 

代码在$().ready触发器被触发后执行。

我错过了什么?

最后我不需要像

<head> 
    <script type='text/javascript' src='https://www.bing.com/api/maps/mapcontrol?callback=loadMapScenario' async defer></script> 
</heady> 

我只能做到这一点wuring运行的解决方案。

非常感谢。

您正在指定地图脚本URL中的回调函数,但在代码中没有具有该名称的函数。这是导致你看到的错误。此外,您拥有的代码不会按原样工作。地图控件异步加载一堆资源。因此,可以达到你的可执行函数,只有最初的JavaScript文件已被加载,其他资源都没有,所以地图API尚不可用。下面是一个代码示例,演示了如何延迟加载地图API:https://github.com/Microsoft/BingMapsV8CodeSamples/blob/master/Samples/Map/Lazy%20Loading%20the%20Map.html

,您可以尝试在这里:http://bingmapsv8samples.azurewebsites.net/#Lazy%20Loading%20the%20Map

+0

完美的作品。谢谢 :) – Torben