585 Stimmen

Erkennen, ob das Gerät iOS ist

Ich frage mich, ob es möglich ist, zu erkennen, ob ein Browser auf iOS läuft, ähnlich wie bei der Feature-Erkennung mit Modernizr (obwohl dies offensichtlich eine Geräteerkennung und keine Feature-Erkennung ist).

Normalerweise würde ich Feature-Erkennung bevorzugen, aber ich muss herausfinden, ob ein Gerät iOS ist, aufgrund der Art und Weise, wie sie Videos behandeln, wie in dieser Frage YouTube API not working with iPad / iPhone / non-Flash device

0 Stimmen

Siehe [Was ist die iOS 5 Benutzeroberfläche?][1] (Duplikat?). [1]: stackoverflow.com/questions/7825873/…

1 Stimmen

Ist dies eine clientseitige oder serverseitige Erkennung?

0 Stimmen

Hey @DouglasGreenshields, es ist clientseitig

10voto

ThiagoPXP Punkte 5152

Wenn Sie Modernizr verwenden, können Sie einen benutzerdefinierten Test dafür hinzufügen.

Es spielt keine Rolle, welchen Erkennungsmodus Sie verwenden (userAgent, navigator.vendor oder navigator.platform), Sie können es immer für eine einfachere spätere Verwendung einpacken.

// Modernizr-Test hinzufügen
Modernizr.addTest('isios', function() {
    return navigator.userAgent.match(/(iPad|iPhone|iPod)/g);
});

// Verwendung
if (Modernizr.isios) {
    // dies fügt der Body-Klasse ios hinzu
    Modernizr.prefixed('ios');
} else {
    // dies fügt der Body-Klasse notios hinzu
    Modernizr.prefixed('notios');
}

2 Stimmen

Sei vorsichtig, Modernizr wandelt automatisch den Namen des hinzugefügten Tests in Kleinbuchstaben um. (in deinem Beispiel wird Modernizr.isiOS niemals true zurückgeben). In meinen Augen ein schlechtes Verhalten der Bibliothek...

4 Stimmen

Nur eine kleine Notiz: Sie können return x ? true : false einfach zu return Boolean(x) oder nur return !!x vereinfachen.

8voto

Kory Nunn Punkte 269

Eine vereinfachte, leicht zu erweiternde Version.

var iOS = ['iPad', 'iPhone', 'iPod'].indexOf(navigator.platform) >= 0;

1 Stimmen

Wenn Sie möchten, dass dies auch auf dem iOS Simulator funktioniert, können Sie folgendes verwenden: navigator.platform.replace(' Simulator', '').

0 Stimmen

Aber es funktioniert nicht, weil ['str'].indexOf('string') == -1

1 Stimmen

Navigator.platform wird genau 'iPad', 'iPhone' oder 'iPod' sein, es sei denn, der Simulator wird ausgeführt.

6voto

Simon B. Punkte 2278

Erkennung von iOS (sowohl <12 als auch 13+)

Gemeinschaftswiki, da die Bearbeitungswarteschlange voll ist und alle anderen Antworten derzeit veraltet oder unvollständig sind.

const iOS_1to12 = /iPad|iPhone|iPod/.test(navigator.platform);

const iOS13_iPad = (navigator.platform === 'MacIntel' && navigator.maxTouchPoints > 1));

const iOS1to12quirk = function() {
var audio = new Audio(); // temporäres Audio-Objekt
audio.volume = 0.5; // hat keine Auswirkung auf iOS <= 12
return audio.volume === 1;
};

const isIOS = !window.MSStream && (iOS_1to12 || iOS13_iPad || iOS1to12quirk());

1 Stimmen

'Plattform' ist jetzt veraltet

4voto

Justin Searls Punkte 4771

Es ist wahrscheinlich sinnvoll zu beantworten, dass iPads mit iOS 13 navigator.platform auf MacIntel eingestellt haben, was bedeutet, dass Sie einen anderen Weg finden müssen, um iPadOS-Geräte zu erkennen.

3voto

Jeffery To Punkte 11678

Es ist nicht erforderlich, navigator.userAgent oder navigator.platform zu testen:

const isIOS = typeof navigator.standalone === 'boolean';

navigator.standalone wird nur in iOS Safari gesetzt. Siehe MDN, Safari HTML-Referenz.

1 Stimmen

Was ist, wenn der Browser Chrome ist?

1 Stimmen

@IBG hat es gerade ausprobiert und es gibt "undefined" auf iOs Chrome zurück. Also ist diese Antwort nicht korrekt.

2 Stimmen

@IBG Ich habe das gerade auf Firefox 38.1 auf dem iPhone (iOS 14.3) und Chrome 95.0.4638.50 auf dem iPad (iPadOS 15.0.2) ausprobiert und es hat auf beiden Geräten funktioniert.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X