Ich habe eine PhoneGap-App für das iPhone erstellt, die Geolocation über JavaScript in der Webansicht verwendet.
Wenn ich die App das erste Mal starte, werde ich aufgefordert, Geolocation für diese App zuzulassen.
Wenn ich "ok" drücke, wird es mich erneut mit der gleichen Frage auffordern, aber diesmal sagt es, dass "index.html" die Erlaubnis haben soll, Geolocation zu verwenden.
Das ist sinnvoll, weil iOS wahrscheinlich die Erlaubnis haben soll, die Geolokalisierung für die App selbst zum ersten Mal zuzulassen und das zweite Mal, dass der Browser eine Erlaubnis benötigt.
Allerdings führt das nicht zu einer tollen Benutzererfahrung:
Wie kann ich diese doppelte Aufforderung verhindern? (Ich wäre genug, wenn die zweite Aufforderung verhindert werden könnte)
Ich habe die Ursache für das Problem gefunden.
Der Aufruf von navigator.geolocation.getCurrentPosition(onsuccess, onerror)
findet statt, bevor Phonegap vollständig geladen wurde.
Dies bedeutet, dass der Geolocation-Aufruf von webview (und nicht ein nativer Anruf über PhoneGap) ausgelöst wird, der erneut um Erlaubnis bittet (was sinnvoll ist). Vergleichen Sie es mit dem normalen Safari-Browser auf Ihrem Smartphone. Für jede neue Website wird eine Geolocation-Berechtigung benötigt. Das gleiche gilt beim Laden von index.html über PhoneGap beim Start der Anwendung.
Die Lösung besteht jedoch darin, auf das Geräteereignis zu warten, das ausgelöst wird, wenn PhoneGap vollständig geladen ist:
%Vor%Dadurch wird die PhoneGap-API verfügbar, die den standardmäßigen HTML5-Gelöschaufruf des Browsers überschreibt und die geografische Position des Geräts über einen nativen Anruf abruft (den Sie bereits in der ersten Eingabeaufforderung akzeptiert haben).
Dies funktioniert, weil die API-Aufrufe von PhoneGap mit dem Standard-W3C-Aufruf für HTML5 identisch sind: Ссылка
Sehen Sie sich das an: Standort-Erlaubnisalarm auf dem iPhone mit PhoneGap
Der zweite scheint der Webkit-Alarm zu sein. Um dies zu verhindern, müssen Sie einfach alle Ihre js-Dateien in das Stammverzeichnis verschieben. Sag mir, ob es funktioniert, da ich bald das gleiche Thema ansprechen muss.
Schließlich wurde das Problem behoben.
Im index.html verschieben Sie einfach Ihre cordova.js
& lt; script src="cordova.js" & gt; & lt; / script & gt;
als erste js-Datei enthalten sein (vor allem sicherstellen, dass es über Karten js ist). Dadurch wird sichergestellt, dass die Eingabeaufforderung nur einmal angezeigt wird
Tags und Links javascript cordova iphone ios geolocation