移动html5发布手机';s本机导航应用程序

移动html5发布手机';s本机导航应用程序,html,cordova,Html,Cordova,我正在开发phonegap/cordova应用程序。有没有办法在浏览器视图中打开手机的本机导航应用程序?或者,是否有从html5应用程序打开本机地图应用程序的最佳实践?或者它们都是特定于平台的 我在一些地方读到,以下内容适用于某些版本的Android <a href="geo:some address here" />Navigate to here</a> 这对iOS有效 <a href="http://maps.apple.com/?daddr=San+F

我正在开发phonegap/cordova应用程序。有没有办法在浏览器视图中打开手机的本机导航应用程序?或者,是否有从html5应用程序打开本机地图应用程序的最佳实践?或者它们都是特定于平台的

我在一些地方读到,以下内容适用于某些版本的Android

<a href="geo:some address here" />Navigate to here</a>

这对iOS有效

<a href="http://maps.apple.com/?daddr=San+Francisco,+CA&saddr=cupertino">Directions</a>


我很惊讶Phonegap没有实现这样的功能

您可以使用神奇的“地图:”协议在iOS 5(谷歌地图)和iOS 6(苹果地图)上打开本机导航应用程序,例如
window.location=“Maps:daddr=50.4,-4.5”

但要在Android上启动原生Google Navigator应用程序,您需要使用phonegap插件。我写这篇文章是为了我自己的目的

更新 该插件现已针对Phonegap 3.x进行了更新,支持Android、iOS和Windows Phone,包括在iOS上选择谷歌地图


插件在这里:

插件很棒!谢谢分享! 我在我的应用程序中尝试过,但不幸的是,我有Phonegap 3.x版,而您的插件仅适用于Phonegap 2.x:(

因此,为了让它在PhoneGap3.x上运行,我从你的github repo中获得了插件,并做了一些更改,使它在3.x上运行

Phonegap 3.x的修改后的PhoneNavigator插件可以从my github repo下载:

如何将其集成到Phonegap 3.x项目中:

  • 打开控制台窗口
  • 转到你的Phonegap应用程序根目录
  • 然后执行:phonegap本地插件添加
  • 从应用程序(例如:yourapp/www)中的repo(www/phonenavigator.js)复制“phonenavigator.js”
  • 在应用程序中包括“phonenavigator.js”:
  • 在你的应用程序(例如:yourapp/www)中复制回购协议(www/cordova.js)中的“cordova.js”
  • 在你的应用程序中包括“cordova.js”:
  • 如何使用它:

    //function declaration
    function navigateTo (lat, lon, successFn, errorFn) {
        cordova.require('cordova/plugin/phonenavigator').doNavigate(lat, lon, successFn, errorFn);
    }
    
    //set lat and lon variables. Most probably read them from the UI
    var latitude =  48.137607;
    var longitude = 11.568569;
    
    //call function
    navigateTo(
        latitude,
        longitude,
        function(){
            console.log("Successfully opened navigator");
        },
        function(){
            console.log("Error opening navigator");
        }
    );
    

    如前所述,以下内容在Galaxy S4 Android(刚刚测试过)上运行,以启动Google地图/导航应用程序和waze:

    <a href="geo:37.786971,-122.399677;u=35">Wikimedia Headquarters</a>
    
    
    
    学分:


    另请参见此处的答案:

    Cordova 3.6.0引入了第二个白名单,用于限制允许哪些URL启动外部应用程序。在Cordova的早期版本中,所有非http URL(如mailto:、geo:、sms:和intent)都被隐式允许作为a标记的目标。因为应用程序的潜力要泄漏信息,如果XSS漏洞允许攻击者构建任意链接,则这些URL也必须被列入白名单,从Cordova 3.6.0开始

    因此,您需要在config.xml中显式添加:

      <access origin="tel:*" launch-external="yes" />
      <access origin="mailto:*" launch-external="yes" />
    

    记录在案,如果有人像我一样通过谷歌搜索找到了这条线索,它直接对我起作用,使用Ionic framework,通过做两件事:

    • 在应用程序的myapp.config(…)中添加

      $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|geo):/);
      
      (别忘了添加$compileProvider作为依赖项)

    • 在config.xml中,添加行

      <access origin="geo:*" launch-external="yes"/>
      
      
      

    仅此而已。

    是的,您可以通过编写插件来检查此链接:我可以确认第一个链接打开一个弹出窗口,在我的android上打开导航应用程序!干杯!用户回答Jeremy Belolo(Angular和Cordova URI白名单)和andriod的“geo:?q=您的查询”以及iOS的“maps:q=您的查询”(或saddr/daddr代替q表示方向)…还可以在iPad上看到它在android谷歌地图上打开谷歌地球。@IhorDIM是的,如果iPad没有安装其他应用程序(如Waze或GPS软件)要处理geo:uri请求,它可能会恢复到Google Earth。Android应该始终使用Google Maps,或者在Google Maps、其他软件和Google Earth之间提供一个选项。我还没有在任何iOS设备上进行测试,但我很想看看iOS7 iPhone如何处理geo:uri标准。我终于更新了原始插件以支持Phonegap 3.x,以及通过地名和lat/lon设置目的地的支持:。现在还有一个Android和iOS的示例项目:FWIW for me
    maps://?q=
    似乎比
    maps:daddr=
    工作得更好(不确定为什么后者不打开给定的坐标,只打开地图应用程序)不幸的是,此插件仅适用于方向,而不只是在地图上显示位置…:/Cool otherwhisephonegap launch navigator==方向。对于地图,请尝试地图插件,例如:好答案!使用此插件,您不需要任何插件即可实现此功能。答案很好且接近完整!但必须提及使用“geo:?q=您的查询”为了将查询传递到andriod上的(谷歌)地图和iOS上的“地图:q=您的查询”(或SADD/daddr而不是q表示方向)…另请参阅和获取Angulars URL:$compileProvider.ahrefSanitationWhiteList(/^\s*(https?| tel | mailto | geo |…):/);