在运行时加载BingMaps API

时间:2017-08-24 12:07:30

标签: javascript jquery bing-maps

我正在尝试在JavaScript文件的运行时加载Bing Maps API。以下是我迄今为止所得到的内容,基于this

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不是   功能

所以我尝试了另一次尝试:

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

load_bing_map();

但是我再次遇到错误:

  

jQuery.Deferred异常:n为null   沃顿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>

我只能在运行时这样做。

1 个答案:

答案 0 :(得分:2)

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

您可以在此处试用:http://bingmapsv8samples.azurewebsites.net/#Lazy%20Loading%20the%20Map