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 提交错误以在其所有脚本中使用安全端点,这样应用程序安全例外就不必申请...
我正在尝试使用 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 提交错误以在其所有脚本中使用安全端点,这样应用程序安全例外就不必申请...