javascript - Oppdage iOS/Android-operativsystem
Jeg har gjort litt research, og dette spørsmålet har dukket opp, men ikke på den måten jeg har tenkt. Jeg bygger en side for en kunde som er en QR-kode landing, som er et sted for å laste ned en applikasjon. Så han trenger ikke å skrive ut 2 QR-koder på en side, jeg vil gjerne oppdage gjeldende operativsystem (Apple/Android/Annet [ikke støttet]) og endre elementene mine basert på den verdien.
Jeg har sett på skriptet "detectmobilebrowsers" og det er bare rettet mot å fortelle om brukeren er på mobil i det hele tatt, mens jeg gjerne vil finne ut hvilket operativsystem brukeren kjører og foreslå den beste applikasjonsversjonen.
Andre svar jeg fant som lignet på dette spørsmålet virket enten utdaterte eller upålitelige (har ingen deteksjon for Android-nettbrettlesere), så jeg er på utkikk etter noe nytt. Hvordan kan jeg oppnå dette? (Helst ved å bruke jQuery - Javascript - PHP i den rekkefølgen).
Svar #1
Du kan teste brukeragentstrengen:
/**
* Determine the mobile operating system.
* This function returns one of 'iOS', 'Android', 'Windows Phone', or 'unknown'.
*
* @returns {String}
*/
function getMobileOperatingSystem() {
var userAgent = navigator.userAgent || navigator.vendor || window.opera;
// Windows Phone must come first because its UA also contains "Android"
if (/windows phone/i.test(userAgent)) {
return "Windows Phone";
}
if (/android/i.test(userAgent)) {
return "Android";
}
// iOS detection from: http://stackoverflow.com/a/9039885/177710
if (/iPad|iPhone|iPod/.test(userAgent) && !window.MSStream) {
return "iOS";
}
return "unknown";
}
Svar #2
Løsning 1: Brukeragentdeteksjon
For Android og iPhone:
if( /Android|webOS|iPhone|iPad|iPod|Opera Mini/i.test(navigator.userAgent) ) {
// run your code here
}
Hvis du vil oppdage alle mobile enheter, inkludert BlackBerry og Windows-telefon, kan du bruke denne omfattende versjonen:
var deviceIsMobile = false; //At the beginning we set this flag as false. If we can detect the device is a mobile device in the next line, then we set it as true.
if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|ipad|iris|kindle|Android|Silk|lge |maemo|midp|mmp|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows (ce|phone)|xda|xiino/i.test(navigator.userAgent)
|| /1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i.test(navigator.userAgent.substr(0,4))) {
deviceIsMobile = true;
}
if(deviceIsMobile){
// run your code here
}
Ulemper: Brukeragentstrenger endres og oppdateres etter hvert som nye telefoner og merker kommer dag for dag. Så du må holde denne listen oppdatert hvis du vil støtte alle mobile enheter.
Løsning 2: mobiloppdagelses JS-bibliotek
Du kan bruke mobil-detekteringsbiblioteket for JS for å gjøre dette.
Ulemper: Disse JavaScript-baserte enhetsdeteksjonsfunksjonene kan KUN fungere for den nyeste generasjonen smarttelefoner, slik som iPhone, Android og Palm WebOS-enheter. Disse enhetsdeteksjonsfunksjonene kan IKKE fungere for eldre smarttelefoner som hadde dårlig støtte for JavaScript, inkludert eldre BlackBerry-, PalmOS- og Windows Mobile-enheter.
Svar #3
function getOS() {
var uA = navigator.userAgent || navigator.vendor || window.opera;
if ((/iPad|iPhone|iPod/.test(uA) && !window.MSStream) || (uA.includes('Mac') && 'ontouchend' in document)) return 'iOS';
var i, os = ['Windows', 'Android', 'Unix', 'Mac', 'Linux', 'BlackBerry'];
for (i = 0; i < os.length; i++) if (new RegExp(os[i],'i').test(uA)) return os[i];
}
Du kan bruke det nå slik:
alert(getOS());
Arbeidende utdrag:
function getOS() {
var uA = navigator.userAgent || navigator.vendor || window.opera;
if ((/iPad|iPhone|iPod/.test(uA) && !window.MSStream) || (uA.includes('Mac') && 'ontouchend' in document)) return 'iOS';
var i, os = ['Windows', 'Android', 'Unix', 'Mac', 'Linux', 'BlackBerry'];
for (i = 0; i < os.length; i++) if (new RegExp(os[i],'i').test(uA)) return os[i];
}
console.log(getOS());