Xamarin:尝试使用带有 html 和 javascript 的 OpenLayers 地图显示 WebView 时出错

Xamarin: Error trying to show WebView using OpenLayers maps with html and javascript

我正在尝试使用 WebView 组件在 xamarin 中显示地图, 尝试将此代码传递给 html 文件,它工作正常。 WebView 来自 Xamarin.Forms

alert('test'); html 正文中的 App 一词显示没有问题,但地图不显示。

测试的设计是 运行 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 步:更改脚本 link 使用 https(对比 http

2:OpenLayers.js 脚本本身使用了很多 non-secure link,这在 iOS 和新的 Android [= Google 的 53=] 级别,因为默认情况下所有 link 都应该是安全的 (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:

因此在 iOS,您必须向您的应用 Info.plist 添加例外,例如:

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

回复:

Android:

Starting with Android 9 (API level 28), cleartext support is disabled by default.

在 Android 9+ 上,您将向您的应用添加安全例外 (cleartextTrafficPermitted)

回复:

注意:我的 Xamarin-based 答案是 linked,或者通过该问题的其他答案直接编辑清单。

顺便说一句:最终的答案是向 OpenLayers 提交错误以在其所有脚本中使用安全端点,这样应用程序安全例外就不必申请...