Xamarin: Ошибка при попытке показать WebView с использованием карт OpenLayers с html и javascript - PullRequest
1 голос
/ 30 мая 2019

Я пытаюсь показать карту в 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 Ответ

1 голос
/ 30 мая 2019

1-й: измените ссылку на скрипт, используя https (против http)

2nd: сам скрипт OpenLayers.js использует множество незащищенных ссылок, и это является проблемой для iOS и новых уровней API Android от Google, поскольку по умолчанию все ссылки должны быть безопасными (https).

Если вы просмотрите выходные данные приложения, вы увидите сообщения журнала, такие как:

App Transport Security заблокировал открытый HTTP-текст (http://) загрузка ресурса, поскольку он небезопасен. Временные исключения можно настроить с помощью файла Info.plist вашего приложения.

IOS:

Так что на iOS вам нужно будет добавить исключение в Info.plist вашего приложения, например:

<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

re: https://stackoverflow.com/a/40299837/4984832

Android:

Начиная с Android 9 (уровень API 28), поддержка открытого текста по умолчанию отключена.

На Android 9+ вы добавите исключение безопасности в свое приложение (cleartextTrafficPermitted)

re: https://stackoverflow.com/a/55997456/4984832

Примечание. Мой ответ на основе Xamarin связан или измените манифест непосредственно через другие ответы на этот вопрос.

Кстати: окончательным ответом будет сообщение об ошибке в OpenLayers для использования безопасных конечных точек во всех их сценариях, поэтому не нужно применять исключения безопасности приложения для ...

...