问题在于,当我使用一种语言加载Map并希望将其更改为另一种语言时。 我试着这样做:
<script/>
但这种方式不起作用......它只是加载我的本地语言。
可行的决定:
let map = new Microsoft.Maps.Map(el, {credentials: key});
// remove map
map.dispose();
// create script and insert it
let script = document.createElement('script');
window.GetMap = function() {
delete window.GetMap;
// 1. remove script tag
// 2. Now we create map again when script was loaded
map = new Microsoft.Maps.Map(el, {credentials: key});
}
// NOTICE: we set language AND user location both
script.src = "https://www.bing.com/api/maps/mapcontrol?callback=GetMap&setLang=zh&UR=CN";
document.head.append(script);
答案 0 :(得分:0)
您的代码存在的问题是Bing Maps控件异步加载了大量其他资源,因此在创建新的地图实例时,资源尚未加载。这是一个延迟加载地图控件的代码示例,它将等待所有资源加载。
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta charset="utf-8" />
<script type='text/javascript'>
var map;
function loadMap() {
if (!map) {
var mapScriptUrl = 'https://www.bing.com/api/maps/mapcontrol?callback=GetMap&key=[YOUR_BING_MAPS_KEY]';
var script = document.createElement("script");
script.setAttribute('defer', '');
script.setAttribute('async', '');
script.setAttribute("type", "text/javascript");
script.setAttribute("src", mapScriptUrl);
document.body.appendChild(script);
}
}
function GetMap()
{
map = new Microsoft.Maps.Map('#myMap', {});
}
</script>
</head>
<body>
<input type="button" onclick="loadMap()" value="Load Map"/>
<div id="myMap" style="position:relative;width:800px;height:600px;"></div>
</body>
</html>
现在,这将解决计时问题,但是在同一页面中将地图控件加载两次可能会导致问题。