Я пытаюсь показать карту в xamarin с помощью компонента WebView, попробуйте передать этот код в html-файл, и он отлично работает. WebView взят из Xamarin.Forms.
Линия alert('test');
и слово App в теле html отображается без проблем, а карта не показывает.
Устройство для тестирования работало под управлением Android 9.
var browser = new WebView();
browser.HeightRequest = 600;
browser.WidthRequest = 600;
var htmlSource = new HtmlWebViewSource();
htmlSource.Html = @"<html>
<head>
<script src='http://www.openlayers.org/api/OpenLayers.js'></script>
</head>
<body>
App
<div id='mapdiv'></div>
<script>
alert('test');
map = new OpenLayers.Map('mapdiv');
map.addLayer(new OpenLayers.Layer.OSM());
var lonLat = new OpenLayers.LonLat(-0.1279688, 51.5077286)
.transform(
new OpenLayers.Projection('EPSG:4326'),
map.getProjectionObject()
);
var zoom = 16;
var markers = new
OpenLayers.Layer.Markers('Markers');
map.addLayer(markers);
markers.addMarker(new OpenLayers.Marker(lonLat));
map.setCenter(lonLat, zoom);
</script>
</body></html>";
browser.Source = htmlSource;
Children.Add(browser);
1-й: Измените использование ссылки на скрипт https
(по сравнению с http
)
2-й: сам скрипт OpenLayers.js
использует много незащищенных ссылок, и это проблема для iOS и новых уровней Android API от Google, поскольку по умолчанию все ссылки должны быть безопасными (https
).
Если вы просмотрите выходные данные приложения, вы увидите такие сообщения журнала, как:
App Transport Security has blocked a cleartext HTTP (http://) resource load since it is insecure. Temporary exceptions can be configured via your app's Info.plist file.
Итак, на iOS вам нужно будет добавить исключение в Info.plist вашего приложения, например:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Re: https://stackoverflow.com/a/40299837/4984832
Starting with Android 9 (API level 28), cleartext support is disabled by default.
На Android 9+ вы добавите исключение безопасности в свое приложение (cleartextTrafficPermitted
)
Re: https://stackoverflow.com/a/55997456/4984832
Примечание. Мой ответ на основе Xamarin связан или отредактируйте манифест напрямую через другие ответы на этот вопрос.
Кстати: окончательным ответом было бы зарегистрировать ошибку в OpenLayers, чтобы использовать безопасные конечные точки во всех их сценариях, чтобы исключения безопасности приложений не применялись для...
@lucianocba OpenLayers/OpenStreetMap имеют конечные точки Rest-API (это то, что используют их библиотеки JS), поэтому вы «могли бы» написать интерфейс/интерфейс C#/Xamarin, но не уверены, что это стоит усилий (конечно, я не знаю вашего приложения). требования)... Есть такие проекты, как OsmSharp, но я не использовал ни один из них, только интерфейс javascript/браузер.
Есть смысл подать отчет об ошибке в OpenLayers для этой библиотеки, ее версия 2 последний раз обновлялась в 2013 году. Следующим выпуском будет версия 6.
Это работает, спасибо, но есть другой способ реализовать OpenLayers в xamarin, я ищу хорошие библиотеки в репозитории nugets безрезультатно. Я хочу альтернативу картам Google