Я скорее подумал, что это будет не так сложно найти, но, похоже, нелегко найти потрясающую статью о кросс-девайсах, как и следовало ожидать.
Я хочу создать ссылку, которая открывает либо браузер мобильного устройства и просматривает карты Google, либо открывает приложение карт (Apple Maps или Google Maps) и напрямую начинает маршрут, то есть: начать в текущем местоположении, закончить в заданной точке ( широта / долгота).
Я могу тестировать на двух устройствах (помимо стека браузера), Android и iPhone.
Следующая ссылка работает только на Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
При нажатии на эту ссылку в Chrome на iPhone это странным образом открывает 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://
протокол схема URL для яблока отображает приложение, которое будет только начать работать на IOS 6 или выше. Есть способы проверить, установлен ли gmaps, а затем выбрать, что делать с URL-адресом, но это было слишком много для того, что я планировал. Итак, я просто создал ссылку maps: // OR maps.google.com/, используя указанные выше параметры.
** ОБНОВИТЬ **
к сожалению, $ .browser.device не работает с jquery 1.9 (источник - http://api.jquery.com/jquery.browser )