【问题标题】:angular js maps call: url failed to load webpage the url can't be shown角度js地图调用:url无法加载网页url无法显示
【发布时间】:2025-12-17 09:10:01
【问题描述】:

我正在尝试从我的 ionic 框架应用程序进行地图调用。在我的 html 文件中,我使用:

<a ng-href="maps://?q={{dest.Latitude}},{{dest.Longitude}}">Maps</a>
<div>{{dest.Latitude}},{{dest.Longitude}}</div>

在我的控制器中,dest 的数据如下所示:

{"Latitude":12.34567, "Longitude":1.23456}

在 div 中正确显示经纬度。

但是如果我点击链接会出错:

Failed to load webpage with error: The URL can't be shown

我也尝试将 lat 和 long 转换为字符串,但它对它没有任何影响。

如果我使用这样的静态地理坐标,一切正常:

<a ng-href="maps://?q=12.34567,1.23456">Maps</a>

我错过了什么?

【问题讨论】:

标签: javascript angularjs maps ionic-framework


【解决方案1】:

好吧,compileProvider 解决方案对我不起作用,所以我做了一个解决方法。

在我的控制器中我使用:

$scope.navigate = function(){
    var geoString = 'maps://?q='+dest.Latitude+','+dest.Longitude+'';
    window.open(geoString, '_system');
  };

我在这里调用函数:

<button ng-click="navigate()" class="button button-icon ion-earth"></button>

这行得通。我认为href中的数据绑定存在问题。

【讨论】:

    【解决方案2】:

    您必须将map 添加到href 清理白名单中。

    示例代码:

    angular.module('app',[])
    .config(
        function( $compileProvider ){   
            $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|ftp|mailto|chrome-extension|map|geo|skype):/);
        }
    );
    <script src="https://ajax.googleapis.com/ajax/libs/angularjs/1.2.23/angular.min.js"></script>
    <div ng-app="app">
        <a ng-href="map:lat=51.527141,lon=-0.087853">Map</a>
        <a ng-href="skype:username">Skype</a>
    </div>

    CompileProvider Docs

    【讨论】:

    • 如果我使用 $compileProvider 清理,我什至无法进入详细信息视图。如果我尝试获取详细信息视图,它还会给我一个错误“无法加载网页并出现错误:无法显示 URL”。
    • 我在 iPhone 模拟器中对其进行了测试,并且工作正常。你能多谈谈它在哪里以及如何失败的吗?
    【解决方案3】:

    确定一下,是在 iOS 设备上测试它吗? 如果我没记错,maps:// 协议仅适用于带有 Apple Maps 的 iOS。

    【讨论】:

    • 是的,它是一个 ios 设备。
    • 我编辑了我的帖子。如果我以静态方式使用链接,它可以工作,但不能用于数据绑定。
    • 如果我按照您的建议替换它,它会打开谷歌地图而不是本地地图应用程序。但我想打开原生地图应用。
    • 奇怪,在我的 iPhone 上它打开了原生应用程序。更好的解决方案是 jad-panda 的。您清理了地图 URI,因此 ng-href 应该可以工作。
    • 好吧,我只是不明白为什么它使用静态坐标而不是数据绑定。