Я ввел карты Bing в свой код с помощью интерактивного SDK Bing Maps V8. Моя проблема в том, что когда я загружаю карту времени Microsoft, а не всегда, я получаю сообщение об ошибке:
«Uncaught TypeError: не удается прочитать свойство 'prototype', равное нулю»
Я не понимаю, что это, потому что я следовал предложениям «интерактивного SDK» на веб-сайте Bing Map Dev Center.
ОШИБКА
Uncaught TypeError: Cannot read property 'prototype' of null
at k (mapcontrol?key=key:14)
at n.h [as create] (mapcontrol?key=key:14)
at e (mapcontrol?key=key:14)
at t.l [as instance] (mapcontrol?key=key:14)
at n.h [as create] (mapcontrol?key=key:14)
at e (mapcontrol?key=key:14)
at t.l [as instance] (mapcontrol?key=key:14)
at new Microsoft.Maps.Map (mapcontrol?key=key:16)
at createBingMap (tracking.js:19)
at tracking.js:118
HTML
<script src = "https://www.bing.com/api/maps/mapcontrol?key=YOURKEY"></script>
JAVASCRIPT
(function()
{
if (Modernizr.geolocation)
{
navigator.geolocation.getCurrentPosition(function(position)
{
var latitude = position.coords.latitude;
var longitude = position.coords.longitude;
var bingResource = ajaxGeoReverse(latitude, longitude);
var comune = bingResource[0].toString();
var provincia = bingResource[1].toString();
createBingMap(latitude, longitude);
var positionLocality = {
"comune": comune, "provincia": provincia
};
$.ajax(
{
type: 'POST',
url: 'https://civicsensethecitizen.altervista.org/php/formTrackingTable.php',
data: {'items': JSON.stringify(positionLocality)},
dataType: 'json',
success: function(data)
{
$.each(data, function(index, item)
{
var pushping = createPushpin(map.getCenter(), item.ID, item.Categoria, item.Gravita);
map.entities.push(pushping);
$('#tracking tbody').append(
'<tr>' +
'<td id = "segnalazioneID">' + item.ID +
'<td>' + item.Data +
'<td>' + item.Posizione +
'<td>' + item.Categoria +
'<td>' + item.Stato +
'</tr>');
});
},
error: function()
{
alert('Connsessione non riuscita');
}
});
}, failGeo);
}
});
function ajaxGeoReverse(latitude, longitude)
{
var bingResource = [];
$.ajax(
{
url: 'https://dev.virtualearth.net/REST/v1/Locations/' + latitude + ',' + longitude,
async: false,
data: {
key: 'YOURKEY',
o: 'json'
},
success: function(data)
{
var result = data.resourceSets[0];
if (result)
{
if (result.estimatedTotal > 0)
{
var comune = JSON.stringify(result.resources[0].address.locality);
var provincia = JSON.stringify(result.resources[0].address.adminDistrict2);
bingResource = [comune, provincia];
}
}
},
error: function()
{
failGeo();
}
});
return bingResource;
};
function createBingMap(latitude, longitude)
{
if (typeof Microsoft !== undefined && typeof Microsoft.Maps !== undefined && Microsoft.Maps.Map !== null)
{
var navigationBarMode = Microsoft.Maps.NavigationBarMode;
map = new Microsoft.Maps.Map(document.getElementById('container-gmap'),
{});
map.setView(
{
mapTypeId: Microsoft.Maps.MapTypeId.aerial,
center: new Microsoft.Maps.Location(latitude, longitude)
});
map.setOptions(
{
maxZoom: 15,
minZoom: 12
});
}
else
{
setTimeout(createBingMap, 500);
}
};
Возможно связанный: stackoverflow.com/questions/43162044/…
Добро пожаловать в Stack Overflow! Похоже, вы разместили конфиденциальную / личную информацию. Пожалуйста, сбросьте свои пароли и / или отозвите ключи и токены API. Вы также можете отредактировать информацию и пометить свое сообщение, чтобы модератор отредактировал историю изменений.
Ok. Я модифицировал пост, простите за некорректную публикацию поста. Я уже проверял этот пост, но он не решил мои проблемы, к тому же я не использую angular
Похоже, есть вероятность, что код навигатора попытается добавить объекты на карту до того, как карта полностью загрузится. Это вопрос времени. Рассмотрите возможность запуска кода геолокации после загрузки карты.
Это известная проблема (см., Например, эта ветка), которая возникает, когда карта инициализируется, но элемент управления Bing Maps не загружен.
Здесь доступны как минимум два решения:
1) Используйте событие load
, чтобы убедиться, что элемент управления Bing Maps был загружен, например:
window.addEventListener("load", function(){
navigator.geolocation.getCurrentPosition(function(position) {
initMap(position.coords);
});
});
2) Укажите имя функция обратного вызова в URL-адресе скрипта карты:
<script type='text/javascript' src='http://www.bing.com/api/maps/mapcontrol?callback=initMap&key=[YOUR_BING_MAPS_KEY]' async defer></script>
Функция initMap
будет запущена после загрузки Bing Maps Control.
Большое спасибо. Ваше решение верное и решило мою проблему.
Вы можете увидеть свой ключ API в сообщении ОШИБКА, пожалуйста, измените свой ключ API.