Javascript UWP 应用程序有地图控件吗?
Is there a map control for Javascript UWP apps?
有什么方法可以在用 Javascript 编写的 UWP Windows 应用程序中包含地图?
显而易见的选项:
- UWP地图控件https://msdn.microsoft.com/en-gb/windows/uwp/maps-and-location/controls-map;所有文档都表明这仅适用于 XAML 应用程序
- 旧版 Windows / Windows Phone 8.x Bing 地图 SDK https://msdn.microsoft.com/en-us/library/hh846481.aspx ;这些工作但基于 v7.0 AJAX 控件,该控件将在 2017 年停止工作
- Bing 地图 AJAX v8.0 或其他网络服务;这些适用于网站并依赖于外部托管 javascript,因此不适用于应用程序
谢谢。
UWP 没有内置 JavaScript 地图 API。但是,您可以使用 Bing Maps V8 地图控件。如您所知,基于 JavaScript 的 Windows 应用程序不使用 WebView/WebBrowser 限制使用外部托管的 JavaScript 文件。有两种解决方法。
首先是在 iframe 中托管您的地图代码。如果您的地图功能已完全包含并且您不需要以编程方式从您的主应用程序更改地图(不太可能),那么这会很好地工作。 UWP 应用程序不允许您在主应用程序和 iframe 中的 JavaScript 代码之间进行通信。
第二个是修改您在应用程序中引用起始页的方式,而不是使用本地上下文,而是使用网络上下文。为此,请打开 package.appxmanifest,并在起始页值之前添加 "ms-appx-web:///"。可能 "ms-appx-web:///index.html"。这可能会限制您的应用程序在基于 JavaScript 的 UWP 应用程序中使用一些较低级别的功能,例如访问文件系统。
在这两种情况下,还要执行以下操作:
- 添加以下内容 URI 并将 WinRT 访问设置为 "All";
"https://.bing.com" 和 "https://.virtualearth.com"
- 在功能下,启用位置。否则,隐藏用户位置
出现在地图中的按钮。
一个你的地图页面,推荐
您将以下内容添加到页面的头部:
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
这些解决方案都不是完美的。基于 JavaScript Windows UWP 的安全性是许多用户在使用其他基于 API 的外部主机 Web 时遇到的主要限制。解决此问题的唯一真正方法是在 Web 浏览器控件中托管您的 JavaScript 应用程序,然后在该控件与 .NET 代码之间添加一个通信层,然后使用 .NET 代码访问特定的 Windows API's,但如果你走那条路,你还不如使用 Apache Cordova,它正是为你做这件事。
有什么方法可以在用 Javascript 编写的 UWP Windows 应用程序中包含地图?
显而易见的选项:
- UWP地图控件https://msdn.microsoft.com/en-gb/windows/uwp/maps-and-location/controls-map;所有文档都表明这仅适用于 XAML 应用程序
- 旧版 Windows / Windows Phone 8.x Bing 地图 SDK https://msdn.microsoft.com/en-us/library/hh846481.aspx ;这些工作但基于 v7.0 AJAX 控件,该控件将在 2017 年停止工作
- Bing 地图 AJAX v8.0 或其他网络服务;这些适用于网站并依赖于外部托管 javascript,因此不适用于应用程序
谢谢。
UWP 没有内置 JavaScript 地图 API。但是,您可以使用 Bing Maps V8 地图控件。如您所知,基于 JavaScript 的 Windows 应用程序不使用 WebView/WebBrowser 限制使用外部托管的 JavaScript 文件。有两种解决方法。
首先是在 iframe 中托管您的地图代码。如果您的地图功能已完全包含并且您不需要以编程方式从您的主应用程序更改地图(不太可能),那么这会很好地工作。 UWP 应用程序不允许您在主应用程序和 iframe 中的 JavaScript 代码之间进行通信。
第二个是修改您在应用程序中引用起始页的方式,而不是使用本地上下文,而是使用网络上下文。为此,请打开 package.appxmanifest,并在起始页值之前添加 "ms-appx-web:///"。可能 "ms-appx-web:///index.html"。这可能会限制您的应用程序在基于 JavaScript 的 UWP 应用程序中使用一些较低级别的功能,例如访问文件系统。
在这两种情况下,还要执行以下操作:
- 添加以下内容 URI 并将 WinRT 访问设置为 "All"; "https://.bing.com" 和 "https://.virtualearth.com"
- 在功能下,启用位置。否则,隐藏用户位置 出现在地图中的按钮。
一个你的地图页面,推荐 您将以下内容添加到页面的头部:
<meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, width=device-width">
这些解决方案都不是完美的。基于 JavaScript Windows UWP 的安全性是许多用户在使用其他基于 API 的外部主机 Web 时遇到的主要限制。解决此问题的唯一真正方法是在 Web 浏览器控件中托管您的 JavaScript 应用程序,然后在该控件与 .NET 代码之间添加一个通信层,然后使用 .NET 代码访问特定的 Windows API's,但如果你走那条路,你还不如使用 Apache Cordova,它正是为你做这件事。