我宁愿以为要发现这个问题并不难,但是似乎很难像您期望的那样找到很棒的跨设备文章。
我想创建一个链接,该链接可以打开移动设备的浏览器并浏览到Google地图,也可以打开地图应用(Apple Maps或Google Maps)并直接开始路线,即:从当前位置开始,在给定点结束(纬度/经度)。
我可以在两个设备(浏览器堆栈旁边),Android和iPhone上进行测试。
以下链接仅适用于Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
点击iPhone的Chrome中的此链接,这会奇怪地打开桌面版Google Maps,并在移动应用中展示广告...
这仅适用于iOS,打开Apple Maps要求我输入一个起始位置(我可以选择“当前位置”)并开始该路线=所需的行为。在Android上,完全无法点击此链接:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
注意maps://协议。
有没有一种优雅的跨设备方式来创建这样的链接?一个适用于所有主要手机的链接?
谢谢
更新:找到解决方案(种类)
这是我想出的。尽管可以正常工作,但它并非我想象的那样。
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://
协议是Apple Maps应用程序的url方案,它将仅在ios 6或更高版本上开始工作。有多种方法可以测试是否安装了gmaps,然后选择要处理的url,但这对我的意图来说实在太多了。因此,我最终使用上述参数创建了一个maps:// OR maps.google.com/链接。
**更新**
可悲的是,$ .browser.device不要因为工作的jQuery 1.9(来源- http://api.jquery.com/jquery.browser)