Hallo Jürgen,
if (isIOS) {
window.ondeviceorientation = compasHandler;
console.log("I-Kompass an!");
} else {
window.deviceorientationabsolute = compasHandler;
console.log("A-Kompass an!");
}
(1) Warum absolute unter Android, aber nicht iOS? Funktioniert unter iOS nur der relative Kompass? (2) Warum ein on... unter iOS, aber nicht unter Android? (3) Eine HTML-Indikation, ob der Kompass an oder aus ist, wäre hilfreich. Auf dem Handy sieht man console.log nicht. (4) Statt den Navigator zu bitten, zwischen Äpfeln und Birnen zu unterscheiden, würde ich Dir empfehlen, auf die Existenz der requestPermission-Methode zu testen. Die Frage, nach welchen Regeln Du zwischen absolutem und relativem Kompass unterscheiden musst, beantwortet das nicht, aber erstmal wäre ja die Frage zu stellen, ob Du das überhaupt musst.
async function registerOrientationHandler(orientationHandler) {
if (DeviceOrientationEvent.requestPermission) {
if ("granted" != await DeviceOrientationEvent.requestPermission()) {
console.log("Orientation-Handler wurde abgelehnt");
return false;
}
}
window.ondeviceorientation = orientationHandler;
console.log("Orientation-Handler wurde registriert");
return true;
}
registerOrientationHandler(compasHandler);
Edit: Fehlende {} ergänzt, danke Felix!
Das kann man auch anders bauen, z.B. geht in einem type="module" Script auch ein top-level await, aber so ist die Registrierung und die Erlaubnisanfrage schön gekapselt. Und normalerweise muss man ja auch nicht auf die Erfolgsmeldung warten.
Rolf
sumpsi - posui - obstruxi