【发布时间】:2021-07-12 11:16:53
【问题描述】:
我是 Uno Platform 的新手,需要帮助我将 Google 地图添加到我的应用中。由于 MapControl 不提供 WASM 支持,看来我需要嵌入一个 javascript 组件。根据https://platform.uno/blog/how-to-embed-javascript-components-in-c-built-uno-webassembly-web-applications/,这应该是可能的。但我似乎无法让它工作。
我有一个包含以下内容的 javascript 文件,该文件直接取自谷歌地图官方网站。也不确定将地图 API 密钥放在哪里。
// Initialize and add the map
function initMap() {
// The location of Uluru
const uluru = { lat: -25.344, lng: 131.036 };
// The map, centered at Uluru
const map = new google.maps.Map(document.getElementById("map"), {
zoom: 4,
center: uluru,
});
// The marker, positioned at Uluru
const marker = new google.maps.Marker({
position: uluru,
map: map,
});
}
我也有这个类,尝试过类似于官方 Uno Platform Embedd Javascript Components 指南中的part 3。
public class GoogleMapsController : FrameworkElement
{
public GoogleMapsController()
{
LoadJavaScript();
}
private async void LoadJavaScript()
{
await this.ExecuteJavascriptAsync("initMap()");
}
}
在 xaml 页面中显示地图:
<local:GoogleMapsController x:Name="googlemaps" Grid.Row="0" Grid.Column="0" Grid.ColumnSpan="4" />
当我运行应用程序时,地图不显示。有谁知道我做错了什么?
Web 控制台中显示以下内容
fail: Windows.UI.Core.CoreDispatcher[0]
dotnet.js:1 Dispatcher unhandled exception
dotnet.js:1 System.ApplicationException
dotnet.js:1 at TestMaps.GoogleMapsController.LoadJavaScript () <0x2f90540 + 0x000e6> in <filename unknown>:0
dotnet.js:1 at System.Runtime.CompilerServices.AsyncMethodBuilderCore+<>c.<ThrowAsync>b__7_0 (System.Object state) <0x2f9ba10 + 0x00010> in <filename unknown>:0
dotnet.js:1 at Windows.UI.Core.CoreDispatcherSynchronizationContext+<>c__DisplayClass3_0.<Post>b__0 () <0x2f9b9d0 + 0x00014> in <filename unknown>:0
dotnet.js:1 at Windows.UI.Core.CoreDispatcher.DispatchItems () <0x2a8a0a0 + 0x001e6> in <filename unknown>:0
如果我在 GoogleMapsController 中将 LoadJavaScript() 更改为同步,则 Web 控制台中会显示以下内容。
dotnet.js:1 Error #1 "ReferenceError: google is not defined" executing javascript: "
put_char @ dotnet.js:1
dotnet.js:1 (function(element) {
put_char @ dotnet.js:1
dotnet.js:1 initMap()
put_char @ dotnet.js:1
dotnet.js:1 })(Uno.UI.WindowManager.current.getView(38002));
put_char @ dotnet.js:1
dotnet.js:1 "
【问题讨论】:
-
您是否在浏览器开发者控制台中看到一些警告/错误?也请支持github.com/unoplatform/uno/issues/67,以加强对
MapControl的未来支持。 -
使用来自控制台的消息/警告编辑帖子。
-
错误信息似乎指出谷歌地图库未加载。您可以尝试与此步骤类似地引用它:qa.website.platform.uno/docs/articles/interop/… 吗?
-
似乎无法正常工作。尝试像 developers.google.com/maps/documentation/javascript/… 这样加载 gmap 仍然得到 google 未定义。好像我需要以某种方式使用“require”,不确定。
-
谢谢!它有效
标签: google-maps webassembly uno-platform