【问题标题】:Controlls missing on Google Maps API3 in Phonegap iOS AppPhonegap iOS App 中的 Google Maps API 3 缺少控件
【发布时间】:2018-10-07 10:54:32
【问题描述】:

我正在开发一个使用 jQuery mobile 和 Phonegap 构建的应用程序。一年多来一直运行良好。然后一两个月前,控件(特别是地图类型、缩放和街景)在没有更新应用的情况下丢失了,并且仅在 iOS 上。

我尝试通过手机的浏览器运行该应用程序,它运行良好。只有在 phonegap (build) 编译后才存在问题。我试图手动强制 UI 设置为 true,但只有地图类型控件出现。我还尝试修改 CSS 以使控件具有疯狂的高 z-index,这也没有任何区别。

我无法在网上找到任何相关信息。如何让控件再次显示?

【问题讨论】:

  • 不知道为什么这被否决了。我们在 iOS 上的应用程序也遇到了完全相同的问题。如前所述,我们可以手动添加 mapType 控件,但不会出现其他控件。尝试不同的 Maps API 版本没有帮助。
  • @RobBaily 我不知道您是否能够解决您的问题,但我在与 Google 合作后想出了一个解决方法,如果您仍然遇到问题,请查看我的答案。跨度>

标签: ios google-maps-api-3 phonegap-build


【解决方案1】:

就我而言,我缺少街景图标。 Google Maps iframe 未触发 onload 事件,因为 Cordova 拒绝了 iframe 的空 url。

ERROR Internal navigation rejected - <allow-navigation> not set for url='about:blank'

我在 config.xml 中设置了&lt;allow-navigation href="*" /&gt;

【讨论】:

  • 像魅力一样工作!更好的是使用 。使用完整的通配符有点危险...
  • 这似乎比我下面的更完整。不知道什么时候改变了,但这里列出的 mod 似乎可以解决问题。
  • 感谢有用的提示。我使用本机 WKWebView,默认情况下我禁用加载除“文件”以外的任何方案,因此我还必须在 func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: ...) { ... } 中启用“关于”。详情见我的回答。
  • 使用 Cordova 的 ionic5 + Google Maps JS API 也有同样的问题。这解决了它!
【解决方案2】:

我一直与 Google 联系,结果发现是在 3.32 版中引入了导致此问题的错误。据我所知,他们正在努力解决这个问题,但同时想出了一个解决方法。

首先,您需要在script标签中指定3.31版本:

<script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY_HERE&v=3.31"></script>

然后在创建mapOptions时,手动设置你想要的控件为真。就我而言:

var mapOptions = {
    center: latlng,
    zoom: 16,
    mapTypeControl: true,
    streetViewControl: true,
    zoomControl: true
};

【讨论】:

  • 感谢您的更新。我们今天将尝试这个,让您知道这是否对我们有用。我以为我用一些旧版本试过这个,但我不确定。
  • 是的,这也对我们有用!您碰巧没有任何指向他们的错误跟踪器的链接,可以告诉我们何时发布修复它?
  • @RobBaily 不幸的是没有。他们说他们在内部提交了它。我不知道这对我们意味着什么。
  • 我刚收到 Google 的通知,他们将于 8 月 14 日切换到 3.33 版本。我认为我们还没有尝试过 3.33 或 3.34。您是否尝试过其中任何一个?我们将很快尝试找出答案,但如果您已经这样做了,那会很高兴知道。我们也会发布我们的结果。
  • 我不记得我是否做过 3.33。
【解决方案3】:

对于那些不使用 Phonegap 而是使用原生 WKWebView 的用户,并且您默认禁用除“文件”之外的任何方案...您还必须在 ViewController.swift 中的 webView() func 中启用“关于”方案

func webView(_ webView: WKWebView, decidePolicyFor navigationAction: WKNavigationAction, decisionHandler: @escaping (WKNavigationActionPolicy) -> Void) {
    var url = navigationAction.request.url;
    let scheme = url!.scheme;

    // open local scheme in WebView
    if (scheme == "file") {
        decisionHandler(.allow);
    }

    // needed to show google maps icons for controls like zoomControl and streetViewControl
    else if (scheme == "about") {
        decisionHandler(.allow);
    }

    // other schemes like fb/http/https/mailto open in external application
    else {
        UIApplication.shared.openURL(url!);
        decisionHandler(.cancel);
    }
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多