我宁愿认为这不会那么难找到,但显然不容易找到一个令人敬畏的交叉设备的文章,正如你所期望的。
我想创建一个链接,打开移动设备的浏览器,浏览谷歌地图,或者打开一个地图应用程序(苹果地图或谷歌地图) ,直接开始一条路线,即: 从当前位置开始,在给定的点结束(lat/long)。
我可以在两个设备上测试(除了浏览器堆栈) ,一个是 Android,一个是 iPhone。
以下连结只适用于 Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
在 iPhone 的 Chrome 浏览器中点击这个链接,就会奇怪地打开桌面版的谷歌地图,并在移动应用程序上投放广告..。
这个只能在 iOS 上运行,打开苹果地图,要求我输入一个开始位置(我可以选择“当前位置”)并开始路由 = 所需的行为。在 Android 上点击这个链接完全失败:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
注意这些映射://protocol。
是否有一种优雅的交叉设备方式来创建这样一个链接
谢谢
更新: 找到解决方案(有点)
这是我想出来的,虽然有效,但和我想象的不太一样。
var ua = navigator.userAgent.toLowerCase(),
plat = navigator.platform,
protocol = '',
a,
href;
$.browser.device = ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i) ? ua.match(/android|webos|iphone|ipad|ipod|blackberry|iemobile|opera/i)[0] : false;
if ($.browser.device) {
switch($.browser.device) {
case 'iphone':
case 'ipad':
case 'ipod':
function iOSversion() {
if (/iP(hone|od|ad)/.test(navigator.platform)) {
// supports iOS 2.0 and later: <http://bit. ly/TJjs1V>
var v = (navigator.appVersion).match(/OS (\d+)_(\d+)_?(\d+)?/);
return [parseInt(v[1], 10), parseInt(v[2], 10), parseInt(v[3] || 0, 10)];
}
}
var ver = iOSversion() || [0];
if (ver[0] >= 6) {
protocol = 'maps://';
}
else {
protocol = 'http://maps.google.com/maps';
}
break;
case 'android':
default:
protocol = 'http://maps.google.com/maps';
break;
}
a.attr('href', protocol + href)
maps://
协议是苹果地图应用程序的 URL 方案,它只能在 ios 6或更高版本上开始工作。有一些方法可以测试是否安装了 gmap,然后选择如何处理 url,但是这对于我的意图来说有点太多了。所以我最终使用上面的参数创建了一个 map://OR maps.google.com/链接。
更新
遗憾的是,$浏览器设备在 jquery 1.9之后就不能工作了 (来源 -http://api.jquery.com/jquery.browser)