Czy istnieje solidny sposób na wykrycie, czy użytkownik korzysta z urządzenia mobilnego w jQuery? Coś podobnego do atrybutu @media CSS? Chciałbym uruchomić inny skrypt, jeśli przeglądarka jest na urządzeniu przenośnym.
Funkcja jQuery $.browser
nie jest tym, czego szukam.
javascript
jquery
mobile
browser-detection
superUntitled
źródło
źródło
Odpowiedzi:
Uwaga edytora: wykrywanie agenta użytkownika nie jest zalecaną techniką dla nowoczesnych aplikacji internetowych. Zobacz komentarze poniżej tej odpowiedzi, aby potwierdzić ten fakt. Zaleca się użycie jednej z pozostałych odpowiedzi przy użyciu funkcji wykrywania i / lub zapytań o media.
Zamiast używać jQuery, możesz użyć prostego JavaScript do jego wykrycia:
Lub możesz połączyć je oba, aby uczynić go bardziej dostępnym poprzez jQuery ...
Teraz
$.browser
wróci"device"
dla wszystkich powyższych urządzeńUwaga:
$.browser
usunięto w jQuery v1.9.1 . Możesz jednak użyć tego przy użyciu kodu wtyczki migracji jQueryBardziej dokładna wersja:
źródło
.This.Is.A.Bad.Idea.
Dla mnie małe jest piękne, dlatego używam tej techniki:
W pliku CSS:
W pliku jQuery / JavaScript:
Moim celem było, aby moja witryna była „przyjazna dla urządzeń mobilnych”. Używam więc CSS Media Queries, aby wyświetlać / ukrywać elementy w zależności od rozmiaru ekranu.
Na przykład w mojej wersji mobilnej nie chcę aktywować Facebook Like Box, ponieważ ładuje wszystkie te zdjęcia profilowe i takie tam. I to nie jest dobre dla użytkowników mobilnych. Oprócz ukrywania elementu kontenera robię to również wewnątrz bloku kodu jQuery (powyżej):
Możesz zobaczyć to w akcji na http://lisboaautentica.com
Nadal pracuję nad wersją mobilną, więc pisząc to nadal nie wygląda tak, jak powinna.
Aktualizacja przez dekin88
Wbudowany jest JavaScript API do wykrywania mediów. Zamiast korzystać z powyższego rozwiązania, skorzystaj z następujących opcji:
Obsługuje przeglądarkę: http://caniuse.com/#feat=matchmedia
Zaletą tej metody jest to, że jest ona nie tylko prostsza i krótsza, ale w razie potrzeby można warunkowo kierować różne urządzenia, takie jak smartfony i tablety, bez konieczności dodawania żadnych elementów zastępczych do DOM.
źródło
screen.width
Właściwość ma charakter globalny. Nie ma potrzeby arbitralnego dodawania elementu do DOM i niepotrzebnego wprowadzania zapytań o media CSS. Ponadto, jeśli przeglądarka znajduje się na pulpicie, a użytkownik zmieni rozmiar okna,$is_mobile
nie będzie aktualizowana.if( screen.width <= 480 ) { // is mobile }
width
wartość atrybutu IIRC. Dlatego iPhone siatkówki będą miaływidth
od640
i wysokości960
w układzie pionowym orazwidth
z960
i wysokości640
w krajobrazie.window.matchMedia
: developer.mozilla.org/en-US/docs/Web/API/Window.matchMediaWedług Mozilli - wykrywanie przeglądarki przy użyciu klienta użytkownika :
Lubię to:
Będzie to pasować do wszystkich popularnych przeglądarek mobilnych, w tym Mozilla, Safari, IE, Opera, Chrome itp.
Aktualizacja dla Androida
EricL zaleca testowanie również
Android
jako agent użytkownika, ponieważ ciąg znaków agenta użytkownika Chrome na tablety nie zawiera „Mobi” (jednak wersje na telefony):źródło
/Mobi/i.test(navigator.userAgent)
jednak, ponieważ jako test () zwraca wartość logiczną./Mobi/i.test(navigator.userAgent) || /Android/i.test(navigator.userAgent)
Prosty i skuteczny jednowarstwowy:
Powyższy kod nie uwzględnia jednak przypadku laptopów z ekranem dotykowym. Dlatego udostępniam drugą wersję opartą na rozwiązaniu @Julian :
źródło
isMobile
funkcja, którą podałeś, powracatrue
na moim urządzeniu docelowym !! (Google Chrome v44.0)To, co robisz, chcąc wykryć urządzenie mobilne, staje się trochę zbyt zbliżone do koncepcji IMO „wąchania przeglądarki”. Prawdopodobnie znacznie lepiej byłoby przeprowadzić wykrywanie niektórych funkcji. Biblioteki takie jak http://www.modernizr.com/ mogą w tym pomóc.
Na przykład, gdzie jest granica między telefonem komórkowym a telefonem komórkowym? Z każdym dniem robi się coraz bardziej rozmazany.
źródło
To nie jest jQuery, ale znalazłem to: http://detectmobilebrowser.com/
Udostępnia skrypty wykrywające przeglądarki mobilne w kilku językach, z których jednym jest JavaScript. To może ci pomóc w tym, czego szukasz.
Ponieważ jednak używasz jQuery, możesz chcieć wiedzieć o kolekcji jQuery.support. Jest to zbiór właściwości do wykrywania możliwości bieżącej przeglądarki. Dokumentacja znajduje się tutaj: http://api.jquery.com/jQuery.support/
Ponieważ nie wiem, co dokładnie starasz się osiągnąć, nie wiem, które z nich będą najbardziej przydatne.
Biorąc to wszystko pod uwagę, myślę, że najlepszym rozwiązaniem jest przekierowanie lub napisanie innego skryptu na wyjściu przy użyciu języka po stronie serwera (jeśli jest to opcja). Ponieważ tak naprawdę nie znasz możliwości mobilnej przeglądarki x, wykrywanie i modyfikowanie logiki po stronie serwera byłoby najbardziej niezawodną metodą. Oczywiście to wszystko jest kwestią sporną, jeśli nie możesz używać języka po stronie serwera :)
źródło
|android|ipad|playbook|silk
zgodnie z opisem w sekcji about (jest to projekt)Czasami pożądane jest, aby wiedzieć, jakiego urządzenia marki używa klient, aby wyświetlać treści specyficzne dla tego urządzenia, takie jak link do sklepu iPhone lub sklepu z Androidem. Modernizer jest świetny, ale pokazuje tylko możliwości przeglądarki, takie jak HTML5 lub Flash.
Oto moje rozwiązanie UserAgent w jQuery, aby wyświetlić inną klasę dla każdego typu urządzenia:
To rozwiązanie pochodzi od Graphics Maniacs http://graphicmaniacs.com/note/detecting-iphone-ipod-ipad-android-and-blackberry-browser-with-javascript-and-php/
źródło
Znaleźć rozwiązanie w: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-javascript/ .
A następnie, aby sprawdzić, czy jest to telefon komórkowy, możesz przetestować za pomocą:
źródło
Jeśli przez „mobilny” rozumiesz „mały ekran”, używam tego:
Na iPhonie skończysz z Window.screen.width 320. Na Androidzie skończysz z window.outerWidth 480 (choć może to zależeć od Androida). iPad i tablet z Androidem zwrócą liczby takie jak 768, aby uzyskać pełny widok, jak chcesz.
źródło
Jeśli korzystasz z Modernizr , jest bardzo łatwy w użyciu,
Modernizr.touch
jak wspomniano wcześniej.Jednak wolę używać kombinacji
Modernizr.touch
testów użytkownika i użytkownika, dla bezpieczeństwa.Jeśli nie korzystasz z Modernizr, możesz po prostu zastąpić
Modernizr.touch
powyższą funkcję('ontouchstart' in document.documentElement)
Należy również pamiętać, że testowanie agenta użytkownika
iemobile
zapewni szerszy zakres wykrytych urządzeń mobilnych Microsoft niżWindows Phone
.Zobacz także to SO pytanie
źródło
TouchEvent.supported
.('ontouchstart' in window)
Jest to alternatywa dlaModernizr.touch
też hacks.mozilla.org/2013/04/...|
zamiast wielu dopasowań. Nie potrzebujesz również,toLowerCase()
ponieważ maszi
modyfikator. Tutaj:var isTouchDevice = Modernizr.touch || /iphone|ipod|ipad|android|iemobile|iphone|ipad|ipod|blackberry|bada/i.test(navigator.userAgent);
Nie możesz polegać
navigator.userAgent
, nie każde urządzenie ujawnia swój prawdziwy system operacyjny. Na przykład w moim HTC zależy to od ustawień (włączanie / wyłączanie „korzystania z wersji mobilnej”). Na stronie http://my.clockodo.com po prostuscreen.width
wykrywaliśmy małe urządzenia. Niestety w niektórych wersjach Androida występuje błąd dotyczący screen.width. Możesz połączyć w ten sposób z userAgent:źródło
Wiem, że to pytanie ma wiele odpowiedzi, ale z tego, co widziałem, nikt nie podchodzi do odpowiedzi tak, jak bym to rozwiązał.
CSS wykorzystuje szerokość (Zapytania o media), aby określić, które style zastosowane do dokumentu internetowego są oparte na szerokości. Dlaczego nie użyć szerokości w JavaScript?
Na przykład w zapytaniach dotyczących multimediów Bootstrap (Mobile First) istnieją 4 punkty przyciągania / przerwania:
Możemy to wykorzystać również do rozwiązania naszego problemu z JavaScriptem.
Najpierw stworzymy funkcję, która pobiera rozmiar okna i zwraca wartość, która pozwala nam zobaczyć, jaki rozmiar urządzenia przegląda nasza aplikacja:
Teraz, gdy mamy skonfigurowaną funkcję, możemy ją nazwać i zapisać wartość:
Twoje pytanie brzmiało:
Teraz, gdy mamy informacje o urządzeniu, pozostaje tylko instrukcja if:
Oto przykład na CodePen: http://codepen.io/jacob-king/pen/jWEeWG
źródło
Small Devices range from 768 to 991 pixels.
to oznacza, że powinno byćwindow.innerWidth < 992
(zawiera 991) to samo dla 1199 powinno być <1200 zamiastW jednej linii javascript:
Jeśli klient użytkownika zawiera „Mobi” (zgodnie z MDN) i dostępny jest program ontouchstart, prawdopodobnie jest to urządzenie mobilne.
źródło
/Mobi/.test(navigator.userAgent)
...match
nie zrobił tego dla mnieDziwi mnie, że nikt nie wskazał miłej strony: http://detectmobilebrowsers.com/ Ma gotowy kod w różnych językach do wykrywania urządzeń mobilnych (w tym między innymi):
Jeśli chcesz również wykryć tablety, po prostu sprawdź sekcję O mnie, aby uzyskać dodatkowy parametr RegEx.
źródło
Jeśli nie martwisz się szczególnie o małe wyświetlacze, możesz użyć funkcji wykrywania szerokości / wysokości. W ten sposób, jeśli szerokość jest poniżej określonego rozmiaru, witryna mobilna jest wyświetlana. To może nie być idealny sposób, ale prawdopodobnie będzie najłatwiejszy do wykrycia dla wielu urządzeń. Może być konieczne włożenie określonego dla iPhone'a 4 (duża rozdzielczość).
źródło
Aby dodać dodatkową warstwę kontroli, używam pamięci HTML5, aby wykryć, czy używa ona pamięci mobilnej czy stacjonarnej. Jeśli przeglądarka nie obsługuje pamięci, mam tablicę mobilnych nazw przeglądarek i porównuję agenta użytkownika z przeglądarkami w tablicy.
To jest dość proste. Oto funkcja:
źródło
Jeśli okaże się, że samo sprawdzenie
navigator.userAgent
nie zawsze jest niezawodne. Większa niezawodność może zostać osiągnięta również poprzez sprawdzenienavigator.platform
. Prosta modyfikacja poprzedniej odpowiedzi wydaje się działać lepiej:źródło
Radzę sprawdzić http://wurfl.io/
Krótko mówiąc, jeśli importujesz mały plik JavaScript:
Pozostanie ci obiekt JSON, który wygląda następująco:
(Zakładając, że używasz Nexusa 7, oczywiście) i będziesz w stanie robić takie rzeczy jak:
Tego właśnie szukasz.
Oświadczenie: Pracuję dla firmy, która oferuje tę bezpłatną usługę.
źródło
Sprawdź ten post , daje naprawdę fajny fragment kodu dotyczący tego, co zrobić, gdy wykryte zostaną urządzenia dotykowe lub co zrobić, gdy wywoływane jest zdarzenie touchstart:
źródło
'ontouchstart' in document.documentElement
jest prawdopodobnie lepszym testem na obsługę dotykową niżwindow.Touch
. Co więcej, skorzystaj z Modernizr.js ( modernizr.com ), ponieważ dużo czasu poświęciłem na próbę prawidłowego wykrycia dotyku. Możesz zobaczyć ich kod wykrywający dotyk na stronie modernizr.com/downloads/modernizr.js, jeśli zobaczysz kod programistyczny i wyszukasz „dotyk”.Oto funkcja, której możesz użyć, aby uzyskać prawdziwą / fałszywą odpowiedź na pytanie, czy korzystasz z przeglądarki mobilnej. Tak, to wąchanie przeglądarki, ale czasami właśnie tego potrzebujesz.
źródło
for
tego! + Zapomniałeś utworzyć RegExp. Oto prostszy:return !!navigator.userAgent.match(new RegExp(agents.join('|'),'i'))
Wszystkie odpowiedzi używają klienta użytkownika do wykrywania przeglądarki, ale wykrywanie urządzeń na podstawie klienta użytkownika nie jest bardzo dobrym rozwiązaniem, lepiej jest wykrywać funkcje takie jak urządzenie dotykowe (w nowym jQuery zamiast tego usuwają
$.browser
i używają$.support
).Aby wykryć telefon komórkowy, możesz sprawdzić zdarzenia dotykowe:
Zaczerpnięty z Jaki jest najlepszy sposób na wykrycie urządzenia z ekranem dotykowym za pomocą JavaScript?
źródło
true
na komputerach stacjonarnych z ekranami dotykowymi. stucox.com/blog/you-cant-detect-a-touchscreenSugerowałbym użycie następującej kombinacji ciągów, aby sprawdzić, czy używany jest typ urządzenia.
Zgodnie z dokumentacją Mozilli ciąg znaków
Mobi
jest zalecany. Ale niektóre ze starych tabletów nie zwracają wartości true, jeśli tylkoMobi
zostaną użyte, dlatego też powinniśmy użyćTablet
łańcucha.Podobnie, za to, że na wszelki wypadek
iPad
iiPhone
strun może być również używany do sprawdzenia typu urządzenia.Większość nowych urządzeń wróci
true
doMobi
łańcucha samodzielnie.źródło
źródło
window.matchMedia("(pointer:coarse)").matches;
inną odpowiedź.Świetna odpowiedź dzięki. Małe ulepszenie do obsługi Windows Phone i Zune:
źródło
if (navigator.userAgent.match(/Android|webOS|iPhone|iPad|etc/)){self.location = "top.htm"}
Użyj tego:
Następnie użyj tego:
źródło
Prosta funkcja oparta na http://detectmobilebrowser.com/
źródło
Jeśli masz dowolną przeglądarkę i próbujesz uzyskać plik navigator.userAgent, otrzymamy informacje o przeglądarce podobne do następujących
Mozilla / 5.0 (Macintosh; Intel Mac OS X 10_13_1) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 64.0.3282.186 Safari / 537.36
To samo, jeśli robisz w telefonie komórkowym, będziesz obserwować
Mozilla / 5.0 (Linux; Android 8.1.0; Pixel Build / OPP6.171019.012) AppleWebKit / 537.36 (KHTML, jak Gecko) Chrome / 61.0.3163.98 Mobile Safari / 537.36
Każda przeglądarka mobilna będzie miała użytkownika z ciągiem zawierającym „Mobile”. Dlatego używam powyższego fragmentu kodu w celu sprawdzenia, czy bieżący agent użytkownika jest web / mobile. Na podstawie wyniku dokonam wymaganych zmian.
źródło
używam tego
źródło
Co powiesz na mobiledetect.net ?
Inne rozwiązania wydają się zbyt podstawowe. Jest to lekka klasa PHP. Wykorzystuje ciąg User-Agent w połączeniu z określonymi nagłówkami HTTP do wykrywania środowiska mobilnego. Możesz także skorzystać z Mobile Detect, używając dowolnej wtyczki innej firmy dostępnej dla: WordPress, Drupal, Joomla, Magento itp.
źródło
Ciągów agenta użytkownika nie należy ufać samemu. Poniższe rozwiązanie będzie działać we wszystkich sytuacjach.
i wywołaj tę funkcję:
źródło