У меня есть интерактивная карта Here Maps, работающая в режиме Legacy, с добавленным прослушивателем событий tap
, например:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-core.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-core-legacy.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-service.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-service-legacy.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-ui.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-mapevents.js"></script>
<script type="text/javascript" src="https://js.api.here.com/v3/3.1/mapsjs-data.js"></script>
<link rel="stylesheet" type="text/css" href="https://js.api.here.com/v3/3.1/mapsjs-ui.css" />
</head>
<body>
<div>
<div style="width: 640px; height: 480px" id="mapContainer"></div>
</div>
<script type="text/javascript">
// Initialize the platform object
var platform = new H.service.Platform({
// We use a real API key but it's not included here for obvious reasons
'apikey': 'notARealAPIKeyPleaseSubstituteForARealOne'
});
// Obtain the default map types from the platform object
var maptypes = platform.createDefaultLayers();
// Instantiate (and display) a map object
// Using raster maptype and P2D for compatibility with IE11
var map = new H.Map(
document.getElementById('mapContainer'),
maptypes.raster.normal.map,
{
zoom: 12,
center: { lat: -33.81, lng: 150.78 },
pixelRatio: window.devicePixelRatio || 1,
engineType: H.map.render.RenderEngine.EngineType.P2D
});
// Add a default UI to the map
var ui = H.ui.UI.createDefault(map, maptypes);
// Make the map draggable
var behavior = new H.mapevents.Behavior(new H.mapevents.MapEvents(map));
// Add a listener for the 'tap' event on the map
map.addEventListener("tap",
function (evt) {
console.log("Map tapped!", evt)
});
</script>
</body>
</html>
Это отлично работает в таких браузерах, как Chrome и IE11 , при этом карту можно перетаскивать, а сведения о событии tap
записываются в консоль. Однако, как только эта страница добавляется в качестве URL-адреса для элемента управления. NET WebBrowser в проекте WinForms, события перетаскивания и касания карты внезапно перестают работать, без регистрации ошибок в консоли. Это почти как если бы что-то там не давало сработать событиям карты по какой-то причине.
Я уже пробовал взломать реестр, подробно описанный в этом посте , чтобы заставить WebBrowser в приложении WinForms использовать IE11 без режима совместимости IE7 (и проверено, что это было правильно применено с помощью средства проверки пользовательского агента), безрезультатно. Я также пробовал запустить страницу, поскольку она загружена в приложение WinForms в отладчике Visual Studio, и она определенно без проблем попадает в строку addEventListener
. Последнее, что я пробовал, - это добавить кнопку на страницу с событием click
, и это тоже отлично работает.
Мне кажется, что у меня заканчиваются варианты. Есть ли что-то, что я упускаю из виду, или есть какое-то странное поведение в элементах управления WebBrowser, которое не позволяет этим событиям запускаться? Если да, то есть ли способ обойти это?