web 端 调取导航总结

本文介绍了一种使用JavaScript在不同设备上(Android和iOS)调用百度地图、高德地图和腾讯地图等地图应用程序进行导航的方法。通过检测用户的设备类型,选择相应的地图API,并利用定时器处理应用启动延迟。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1  跳到百度网页版

 window.location.href = 'http://api.map.baidu.com/direction?origin=latlng:' + lat + ',' + lng + '|name:停车位&destination=' + name + '&mode=driving&region=石家庄&output=html&src=阿大撒';

 

2 高德

<a href="https://uri.amap.com/marker?position=经度,纬度&name=所在的位置名称">高德地图</a>

3 js 直接调取 手机已经安装的 app

//获取浏览器信息

    var browser = {

        ua : function() {

            var u = navigator.userAgent;

            var isChrome = u.match(/Chrome\/([\d.]+)/)

                || u.match(/CriOS\/([\d.]+)/);

            var isAndroid = u.match(/(Android);?[\s\/]+([\d.]+)?/);

            var iosVersion = function() {

                if (/iP(hone|od|ad)/.test(navigator.platform)) {

                    var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);

                    return [ parseInt(v[1], 10), parseInt(v[2], 10),

                        parseInt(v[3] || 0, 10) ];

                }

            }();

            var chromeVersion = function() {

                var chrome = navigator.userAgent.match(/Chrome\/(\d+)\./);

                if (chrome) {

                    return parseInt(chrome[1], 10);

                }

            }();

            var ios9 = iosVersion && iosVersion[0] >= 9;

            var chrome18 = isChrome && isAndroid && chromeVersion

                && chromeVersion > 18;

            return { // 移动终端浏览器版本信息

                trident : u.indexOf('Trident') > -1, // IE内核

                presto : u.indexOf('Presto') > -1, // opera内核

                webKit : u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核

                gecko : u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, // 火狐内核

                mobile : !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端

                iOS : !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端

                android : u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或uc浏览器

                iPhone : u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器

                iPad : u.indexOf('iPad') > -1, // 是否iPad

                webApp : u.indexOf('Safari') == -1, // 是否web应该程序,没有头部与底部

                weChat : u.indexOf('MicroMessenger') > -1,

                UC : u.indexOf('UCBrowser') > -1,

                u3 : u.indexOf('U3') > -1,

                chrome : u.indexOf('Chrome') > -1,

                windowsPhone : u.indexOf("Windows Phone") > -1,

                samsung : u.indexOf("Samsung") > -1,

                QQ : (u.match(/\sQQ/i) != null ? u.match(/\sQQ/i).toLowerCase() == " qq"

                    : false),

                isChrome : isChrome,

                isAndroid : isAndroid,

                iosVersion : iosVersion,

                chromeVersion : chromeVersion,

                ios9 : ios9,

                chrome18 : chrome18

            };

        }()

    }

    var ua = browser.ua;

    // 打开地图App,开始导航

    function openMapApp(lat, lng, addr) {

            // 地图uri api数组

        var uri = new Array();

        if (ua.android) {

            // 百度地图uri api

            uri[0] = "bdapp://map/navi?location=" + lat + "," + lng + "&query="

                + addr;

            // 高德地图uri api

            uri[1] = "androidamap://navi?sourceApplication=xlwx&poiname=" + addr

                + "&lat=" + lat + "&lon=" + lng + "&dev=1&style=2";

            // 腾讯地图uri api

            uri[2] = "qqmap://map/marker?marker=coord:" + lat + "," + lng

                + ";title:" + addr + "&referer=xlwx";

        } else if (ua.iOS) {

            // 百度地图uri api

            uri[0] = "baidumap://map/navi?location=" + lat + "," + lng + "&query="

                + addr;

// 高德地图uri api

            uri[1] = "iosamap://navi?sourceApplication=xlwx&poiname=" + addr

                + "&lat=" + lat + "&lon=" + lng + "&dev=1&style=2";

// 腾讯地图uri api

            uri[2] = "qqmap://map/marker?marker=coord:" + lat + "," + lng

                + ";title:" + addr + "&referer=xlwx";

// 苹果地图uri api

            uri[3] = "http://maps.apple.com/?sll=" + lat + "," + lng + "&address="

                + addr;

        }

//调用uri

        if(uri.length == 0){

            return;

        }

        window.location.href = uri[0];

//启动定时器time1

        var time1 = setTimeout(function() {

// 若启动应用,则js会被中断较长时间,超出此范围

            window.location.href = uri[1];

        }, 2000);

//启动定时器time2

        var time2 = setTimeout(function() {

// 若启动应用,则js会被中断较长时间,超出此范围

            window.location.href = uri[2];

        }, 4000);

//清除定时器

        window.beforeunload = function() {

            if(time1 != null){

                clearTimeout(time1);

            }

            if(time2 != null){

                clearTimeout(time2);

            }

        }

        window.pagehide = function() {

            if(time1 != null){

                clearTimeout(time1);

            }

            if(time2 != null){

                clearTimeout(time2);

            }

        }

        window.onblur = function() {

            if(time1 != null){

                clearTimeout(time1);

            }

            if(time2 != null){

                clearTimeout(time2);

            }

        }

    }

 

demo

<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport"
          content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>Document</title>
</head>
<body>
     <button onclick="openMapApp(39.940166,116.410234,'我家')">
         点击导航
     </button>
     <script>
         var browser = {

             ua : function() {

                 var u = navigator.userAgent;

                 var isChrome = u.match(/Chrome\/([\d.]+)/)

                     || u.match(/CriOS\/([\d.]+)/);

                 var isAndroid = u.match(/(Android);?[\s\/]+([\d.]+)?/);

                 var iosVersion = function() {

                     if (/iP(hone|od|ad)/.test(navigator.platform)) {

                         var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);

                         return [ parseInt(v[1], 10), parseInt(v[2], 10),

                             parseInt(v[3] || 0, 10) ];

                     }

                 }();

                 var chromeVersion = function() {

                     var chrome = navigator.userAgent.match(/Chrome\/(\d+)\./);

                     if (chrome) {

                         return parseInt(chrome[1], 10);

                     }

                 }();

                 var ios9 = iosVersion && iosVersion[0] >= 9;

                 var chrome18 = isChrome && isAndroid && chromeVersion

                     && chromeVersion > 18;

                 return { // 移动终端浏览器版本信息

                     trident : u.indexOf('Trident') > -1, // IE内核

                     presto : u.indexOf('Presto') > -1, // opera内核

                     webKit : u.indexOf('AppleWebKit') > -1, // 苹果、谷歌内核

                     gecko : u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, // 火狐内核

                     mobile : !!u.match(/AppleWebKit.*Mobile.*/), // 是否为移动终端

                     iOS : !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), // ios终端

                     android : u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, // android终端或uc浏览器

                     iPhone : u.indexOf('iPhone') > -1, // 是否为iPhone或者QQHD浏览器

                     iPad : u.indexOf('iPad') > -1, // 是否iPad

                     webApp : u.indexOf('Safari') == -1, // 是否web应该程序,没有头部与底部

                     weChat : u.indexOf('MicroMessenger') > -1,

                     UC : u.indexOf('UCBrowser') > -1,

                     u3 : u.indexOf('U3') > -1,

                     chrome : u.indexOf('Chrome') > -1,

                     windowsPhone : u.indexOf("Windows Phone") > -1,

                     samsung : u.indexOf("Samsung") > -1,

                     QQ : (u.match(/\sQQ/i) != null ? u.match(/\sQQ/i).toLowerCase() == " qq"

                         : false),

                     isChrome : isChrome,

                     isAndroid : isAndroid,

                     iosVersion : iosVersion,

                     chromeVersion : chromeVersion,

                     ios9 : ios9,

                     chrome18 : chrome18

                 };

             }()

         }

         var ua = browser.ua;
         function openMapApp(lat, lng, addr) {

             // 地图uri api数组

             var uri = new Array();

             if (ua.android) {

                 // 百度地图uri api

                 uri[0] = "bdapp://map/navi?location=" + lat + "," + lng + "&query="

                     + addr;

                 // 高德地图uri api

                 uri[1] = "androidamap://navi?sourceApplication=xlwx&poiname=" + addr

                     + "&lat=" + lat + "&lon=" + lng + "&dev=1&style=2";

                 // 腾讯地图uri api

                 uri[2] = "qqmap://map/marker?marker=coord:" + lat + "," + lng

                     + ";title:" + addr + "&referer=xlwx";

             } else if (ua.iOS) {
                 // 百度地图uri api

                 uri[0] = "baidumap://map/navi?location=" + lat + "," + lng + "&query="

                     + addr;

                 // 高德地图uri api

                 uri[1] = "iosamap://navi?sourceApplication=xlwx&poiname=" + addr

                     + "&lat=" + lat + "&lon=" + lng + "&dev=1&style=2";

                 // 腾讯地图uri api

                 uri[2] = "qqmap://map/marker?marker=coord:" + lat + "," + lng

                     + ";title:" + addr + "&referer=xlwx";

                 // 苹果地图uri api

                 uri[3] = "http://maps.apple.com/?sll=" + lat + "," + lng + "&address="

                     + addr;

             }

             //调用uri
             if(uri.length == 0){

                 return;

             }
             window.location.href = uri[0];

             //启动定时器time1

             var time1 = setTimeout(function() {

                 // 若启动应用,则js会被中断较长时间,超出此范围
                 window.location.href = uri[1];

             }, 2000);

             //启动定时器time2

             var time2 = setTimeout(function() {

                 // 若启动应用,则js会被中断较长时间,超出此范围
                 window.location.href = uri[2];

             }, 4000);

             //清除定时器

             window.beforeunload = function() {

                 if(time1 != null){

                     clearTimeout(time1);

                 }

                 if(time2 != null){

                     clearTimeout(time2);

                 }

             }

             window.pagehide = function() {

                 if(time1 != null){

                     clearTimeout(time1);

                 }

                 if(time2 != null){

                     clearTimeout(time2);

                 }

             }

             window.onblur = function() {

                 if(time1 != null){

                     clearTimeout(time1);

                 }

                 if(time2 != null){

                     clearTimeout(time2);

                 }

             }

         }
     </script>
</body>
</html>

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值