Доброго времени суток!
Я делаю простое веб-приложение на андроид. На одной из страниц сайта, который используется в приложении есть встроенная Яндекс карта.
На устройствах с Андроид 4 и ниже, карта не отображается. Опытным путем выяснил, что не срабатывает событие ymaps.ready, в которое передается функция init, создающая экземпляр карты. Если вызвать функцию init по таймауту, то возникает ошибка "Uncaught TypeError: undefined is not a function" в строке
myMap = new ymaps.Map
то есть приложение не видит объект ymaps, хотя библиотека яндекс загружается. Пробовал загружать библиотеку яндекс на свой сервер - тот же результат. Все нужные разрешения в приложении выставлены. setJavaScriptEnabled = true. В андроид 6 и выше карты отображаются. В чем может быть дело?
Ниже код подключения карты:
var myMap;
// Дождёмся загрузки API и готовности DOM.
ymaps.ready(init);
setTimeout(init, 5000);
function init () {
alert('init');
// Создание экземпляра карты и его привязка к контейнеру с
// заданным id ("map").
myMap = new ymaps.Map('map', {
// При инициализации карты обязательно нужно указать
// её центр и коэффициент масштабирования.
center: [55.76, 37.64], // Москва
zoom: 10
}, {
searchControlProvider: 'yandex#search'
});
document.getElementById('destroyButton').onclick = function () {
// Для уничтожения используется метод destroy.
myMap.destroy();
};
}
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Примеры. Размещение карты на странице.</title>
<script src="https://api-maps.yandex.ru/2.1/?lang=ru_RU" type="text/javascript"></script>
<script src="custom.js" type="text/javascript"></script>
<style>
body, html {
padding: 0;
margin: 0;
width: 100%;
height: 100%;
}
#map {
width: 100%;
height: 90%;
}
</style>
</head>
<body>
<div id="map"></div>
<input type="button" id="destroyButton" value="Удалить карту"/>
</body>
</html>