移动html5启动手机的原生导航应用程序

时间:2013-01-11 21:31:09

标签: html5 cordova

我正在开发一个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没有实现这样的功能。

5 个答案:

答案 0 :(得分:16)

您可以使用魔术&#34;地图打开iOS 5(谷歌地图)和iOS 6(Apple地图)上的原生导航应用程序:&#34;协议,例如window.location = "maps:daddr=50.4,-4.5"

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

<强>更新 该插件现已针对Phonegap 3.x进行了更新,并支持Android,iOS和Windows Phone,包括在iOS上选择Google地图的选项。

该插件位于:https://github.com/dpa99c/phonegap-launch-navigator

答案 1 :(得分:7)

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

所以为了让它在Phonegap 3.x上运行,我从你的github repo获得了插件并进行了一些更改,以便它适用于3.x

可以从我的github repo下载修改后的Phonegap 3.x PhoneNavigator插件: https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git

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

  1. 打开控制台窗口
  2. 转到您的Phonegap应用根
  3. 然后执行:phonegap local plugin add https://github.com/viktor0710/PhoneNavigator-Phonegap-3.x.git
  4. 从应用程序中的repo(www / phonenavigator.js)复制“phonenavigator.js”(例如:yourapp / www)
  5. 在你的应用中包含“phonenavigator.js”:
  6. 从您应用中的repo(www / cordova.js)复制“cordova.js”(例如:yourapp / www)
  7. 在你的应用中包含“cordova.js”:
  8. 如何使用它:

    //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");
        }
    );
    

答案 2 :(得分:7)

如上所述,以下适用于Galaxy S4 Android(刚刚测试过),用于启动Google地图/导航应用程序并使用:

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

信用:http://en.wikipedia.org/wiki/Geo_URI#Example

请在此处查看答案:https://stackoverflow.com/a/19765368/2728686

答案 3 :(得分:7)

为了记录,如果有人通过像我一样在谷歌上找到这个帖子,那么它直接适用于我,使用Ionic框架,做两件事:

  • 在您的应用的myapp.config(...)中添加

    $compileProvider.aHrefSanitizationWhitelist(/^\s*(https?|geo):/);
    

    (别忘了添加$ compileProvider作为依赖项)

  • 在config.xml中,添加行

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

这就是全部。

答案 4 :(得分:2)

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

Cordova 3.6.0 Whitelist Guide

所以你需要在config.xml中明确添加:

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