Как установить язык динамически в Bing Maps JavaScript V8 - PullRequest
0 голосов
/ 27 апреля 2018

Проблема в том, что когда я загружаю Map одним языком и хочу, чтобы он был изменен на другой язык. Я пытался добиться этого так:

  1. map.dispose ()
  2. добавить <script/> с setLang и setMkt
  3. создать карту заново

но этот способ не работает ... он просто загружает мой местный язык.


выполнимое решение:

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);

1 Ответ

0 голосов
/ 27 апреля 2018

Проблема с вашим кодом заключается в том, что элемент управления 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>

Теперь это решит проблему синхронизации, однако загрузка элемента управления картой дважды на одной странице может вызвать проблемы.

...