正确导入谷歌地图API到UI5应用程序



我在确定将第三方库(如Google Maps JavaScript API)导入UI5应用程序的最佳方法时遇到了麻烦。到目前为止,我已经考虑了以下方法:

  • index.html中使用<script>标记,例如
    <script src="https://maps.googleapis.com/maps/api/js?key=api_key"></script>
    这在本地测试时有效,但如本 SAP 博客文章中所述,从 SAP Fiori Launchpad 启动的应用程序通过Component.js启动,而不是index.html
  • 同一篇博客文章提到 通过sap.ui.define导入库 ,这实际上是我正在使用应用程序中已有moment.js做的事情,它有效。问题是谷歌地图API没有公开全局实例名称/不包含可以导入的单个JS文件,因此此导入失败。去年6月有人提出过类似的问题,但没有得到答复。
  • 对同一问题的评论提到使用require.js导入Google Maps API。这可能会起作用,但似乎是一个黑客。感觉应该有一些特定于 UI5 的方法可以做到这一点,而无需导入另一个第三方库。
  • 最后,这篇SAP博客文章建议在窗口加载后手动创建Google Maps导入<script>标签并将其附加到DOM中。这似乎也是一个黑客,但可能是目前实现这一目标的唯一方法。

任何帮助确定实现这一目标的正确方法将不胜感激!

好吧,我会这样做:

  1. 为地图创建自定义控件(最好从sap.ui.core.HTML);
  2. 在此控件init方法中,通过向页面添加脚本标记来加载GoogleMaps(此处不需要加载事件,因为执行此代码时页面已加载);
  3. renderer此新控件,请创建一个将呈现地图的div;
  4. HTML控件具有非常重要的属性 - "preferDOM",这必须设置为true,否则,当UI5渲染周期发生时,GoogleMap将被销毁并再次创建,在这种情况下这是非常糟糕的用户体验。

有很多不同的方法可以在UI5应用程序中实现谷歌地图:

  • 如果您使用的是SAPUI5:则可以配置用于通用地图集成的控件,以使用Google地图作为提供程序: https://sapui5.hana.ondemand.com/#/entity/sap.ui.vbm.GeoMap https://sapui5.hana.ondemand.com/#/entity/sap.ui.vk.MapContainer

  • 如果您使用的是 OpenUI5,您可能会对这个将 google API 包装在自定义控件中的社区库感兴趣: https://github.com/jasper07/openui5-googlemaps

  • 如果你需要其他东西,你可以按照上面的海报解释直接注入谷歌的JavaScript,并将地图注入到应用程序中,但它可能不够灵活。您始终可以创建一个简单的自定义控件,为地图呈现空div,并将其与maps API连接,以通过Google API呈现地图。

但是,请注意Google TOS,他们可能需要许可证才能在您的代码中有效地使用地图API。

玩得愉快 迈克尔

我最终做了以下操作,这似乎提供了所需的结果:

jQuery.sap.includeScript(
"https://maps.googleapis.com/maps/api/js?key=api_key",
"includeGoogleMaps",
function () {
// Do things
}
);

我在以下堆栈溢出问题中找到了此解决方案:

  • 在 sapui5 中使用外部 js 库
  • UsingjQuery.sap.includeScript().then() in HCP Firori Launchpad

如果建议的解决方案有任何问题,请告诉我。

最新更新