Ich dachte eher, dass dies nicht so schwer herauszufinden sein würde, aber anscheinend ist es nicht einfach, einen fantastischen geräteübergreifenden Artikel zu finden, wie man es erwarten würde.
Ich möchte einen Link erstellen, der entweder den Browser des Mobilgeräts öffnet und zu Google Maps surft ODER eine Karten-App (Apple Maps oder Google Maps) öffnet und direkt eine Route startet, dh: am aktuellen Standort beginnen, an einem bestimmten Punkt enden ( lat / long).
Ich kann auf zwei Geräten (neben dem Browserstack) testen, einem Android und einem iPhone.
Der folgende Link funktioniert nur unter Android:
<a href="http://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Durch Klicken auf diesen Link in Chrome des iPhones wird Google Maps in der Desktop-Version mit Anzeigen in der mobilen App auf seltsame Weise geöffnet ...
Dieser funktioniert nur unter iOS und öffnet Apple Maps und fordert mich auf, einen Startort einzugeben (ich kann "Aktueller Ort" auswählen) und die Route = gewünschtes Verhalten zu starten. Das Klicken auf diesen Link schlägt unter Android vollständig fehl:
<a href="maps://maps.google.com/maps?daddr=lat,long&ll=">Take me there!</a>
Beachten Sie das Protokoll maps: //.
Gibt es eine elegante geräteübergreifende Möglichkeit, eine solche Verbindung herzustellen? Ein Link, der auf allen Haupthandys funktioniert?
Vielen Dank
UPDATE: Lösung gefunden (irgendwie)
Folgendes habe ich mir ausgedacht. Es ist nicht ganz das, was ich mir vorgestellt habe, obwohl es funktioniert.
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)
Das maps://
Protokoll ist das URL-Schema für die Apple Maps-App, die erst ab iOS 6 oder höher funktioniert. Es gibt Möglichkeiten zu testen, ob gmaps installiert ist, und dann auszuwählen, was mit der URL geschehen soll, aber das war etwas zu viel für das, was ich beabsichtigt hatte. Also habe ich gerade einen Maps erstellt: // OR maps.google.com/link, unter Verwendung der oben genannten Parameter.
** UPDATE **
leider $ .browser.device nicht funktionieren , da jquery 1.9 (Quelle - http://api.jquery.com/jquery.browser )
maps.google.com
funktioniert also unter Android und Desktop sowie maps://
unter iOS.
a
(die letzte Zeile) undefiniert ist. Ich habe eine URL in einem infoWindow, die ich je nach verwendetem Gerät ändern muss.
switch
Anweisung überprüfen und den Browser entsprechend weiterleiten .