मोबाइल ब्राउज़र का पता लगाना


888

मैं एक ऐसे फंक्शन की तलाश में हूं, जो बूलियन वैल्यू लौटाए अगर यूजर के पास मोबाइल ब्राउजर है या नहीं।

मुझे पता है कि मैं navigator.userAgentregex का उपयोग करके उस फ़ंक्शन का उपयोग और लिख सकता हूं , लेकिन उपयोगकर्ता-एजेंट विभिन्न प्लेटफार्मों के लिए बहुत अधिक हैं। मुझे संदेह है कि सभी संभव उपकरणों से मेल खाना आसान होगा, और मुझे लगता है कि यह समस्या कई बार से पहले हल हो गई है, इसलिए इस तरह के कार्य के लिए किसी प्रकार का पूर्ण समाधान होना चाहिए।

मैं इस साइट को देख रहा था , लेकिन दुख की बात यह है कि स्क्रिप्ट इतनी गूढ़ है कि मुझे इस बात का कोई अंदाजा नहीं है कि इसे अपने उद्देश्य के लिए कैसे इस्तेमाल किया जाए, जो कि एक ऐसा फंक्शन तैयार करना है जो सच / गलत हो।



2
इसे पढ़ने का प्रयास करें। stackoverflow.com/questions/743129/…
KyelJmD

5
@ थ्रस्टमास्टर: यह वास्तव में नहीं होगा। अलग-अलग जेएस को अलग-अलग ब्राउज़रों में सेव करने का मतलब है कि आपको Vary: User-Agentअपनी प्रतिक्रिया से जोड़ना होगा, अन्यथा कैशिंग प्रॉक्सी एक संस्करण को संग्रहीत करेगा और इसे अन्य प्रकार के ब्राउज़र पर भेजेगा। लेकिन Vary: User-AgentIE में प्रतिक्रिया को अस्वीकार्य बनाता है।
बोबिन्स

16
@ क्या: आप "मोबाइल" ब्राउज़र का पता लगाकर क्या करने की कोशिश कर रहे हैं? टैबलेट और हाइब्रिड कंप्यूटिंग डिवाइसेस की आज की दुनिया में अंतर बहुत अधिक है। क्या आप छोटी स्क्रीन का पता लगाना चाहते हैं, और उस मामले में एक अलग यूआई प्रस्तुत करना चाहते हैं? क्या आप कम-बैंडविड्थ कनेक्टिविटी का पता लगाना चाहते हैं? क्या आप स्पर्श इंटरफेस का पता लगाना चाहते हैं?
बोबोंस

2
इसलिए मैंने Detmobilebrowsers.com जावास्क्रिप्ट विधि का उपयोग करने के लिए अपने उत्तर को अपडेट किया है, लेकिन अगर किसी को इसकी आवश्यकता है तो एक बूलियन मान लौटाएं। ( शायद ज़रुरत पड़े )। हैप्पी डिटेक्टिंग :)
माइकल ज़ापोरोज़ेह

जवाबों:


1316

रेगेक्स का उपयोग करके ( detectmobilebrowsers.com से ):

यहाँ एक समारोह एक पागलपन की हद तक लंबी और व्यापक regex जो एक रिटर्न का उपयोग करता है है trueया falseउपयोगकर्ता एक मोबाइल के साथ ब्राउज़ कर रहा है या नहीं, के आधार पर मूल्य।

window.mobileCheck = function() {
  let check = false;
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino/i.test(a)||/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(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  return check;
};

इस परीक्षण में टेबलेट को शामिल करने के इच्छुक लोगों के लिए (हालांकि यकीनन, आपको ऐसा नहीं करना चाहिए), आप निम्न फ़ंक्शन का उपयोग कर सकते हैं:

window.mobileAndTabletCheck = function() {
  let check = false;
  (function(a){if(/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino|android|ipad|playbook|silk/i.test(a)||/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(a.substr(0,4))) check = true;})(navigator.userAgent||navigator.vendor||window.opera);
  return check;
};

मूल उत्तर

आप बस उपकरणों की एक सूची के माध्यम से चल रहा है और जाँच कर सकते हैं कि क्या ऐसा useragentकुछ भी मेल खाता है:

  function detectMob() {
    const toMatch = [
        /Android/i,
        /webOS/i,
        /iPhone/i,
        /iPad/i,
        /iPod/i,
        /BlackBerry/i,
        /Windows Phone/i
    ];

    return toMatch.some((toMatchItem) => {
        return navigator.userAgent.match(toMatchItem);
    });
}

हालाँकि, जब से आप मानते हैं कि यह विधि अविश्वसनीय है, आप मान सकते हैं कि किसी भी डिवाइस का रिज़ॉल्यूशन 800x600 या उससे कम था, एक मोबाइल डिवाइस भी था, जो आपके लक्ष्य को और भी अधिक संकुचित कर देता है (हालाँकि इन दिनों कई मोबाइल उपकरणों में इससे कहीं अधिक रिज़ॉल्यूशन हैं)

अर्थात

  function detectMob() {
    return ( ( window.innerWidth <= 800 ) && ( window.innerHeight <= 600 ) );
  }

संदर्भ:


25
नमस्ते, मैंने अभी अपने iPad 3, iOS 6.1.2 पर detectmobilebrowsers.com लिंक का दौरा किया , और यह कहता है कि "कोई मोबाइल ब्राउज़र का पता नहीं चला है"।
रिचर्ड लवजॉय

49
@RichardLovejoy जब साइट्स बनाते हैं, तो आमतौर पर आईपैड को मोबाइल नहीं माना जाता है।
माइकल ज़ापोरोज़ेत्स

42
के बारे में पृष्ठ से: Android गोलियाँ, iPads, जलाने आग और PlayBooks डिजाइन द्वारा पता लगाया नहीं कर रहे हैं। गोलियों के लिए समर्थन जोड़ने के |android|ipad|playbook|silkलिए, पहले रेगेक्स में जोड़ें ।
ग्रास डबल

13
Google TV भी Android है। मोबाइल को क्या परिभाषित करें? स्क्रीन का आकार ? स्पर्श करें? उपकरण जब मैं डिजाइन करता हूं तो यह माउसओवर का सवाल होता है या नहीं, बड़े बॉटन या छोटे लिंक का। तो, अब के लिए, मैं "if (Modernizr.touch)" :) के साथ
दौड़ता हूं

30
गॉड, उपयोगकर्ता एजेंटों का यह पूरा विचार भयानक है और वास्तव में, वास्तव में रोकने की जरूरत है। हमें वास्तव में ग्राहकों को ज्वार के खिलाफ लड़ने की अनुमति देने से रोकना होगा और मीडिया के सवालों से बचना होगा। यदि वे विशेष पृष्ठों के लिए पैमाने के आधार पर पुनर्निर्देशन करना चाहते हैं, तो बस जेएस के माध्यम से एक विशेष मीडिया क्वेरी की सीमा की जाँच करें अर्थात tylergaw.com/articles/reacting-to-media-queries-in-javascript
markzzm

324

कैसा रहेगा:

if (typeof window.orientation !== 'undefined') { ... }

... चूंकि स्मार्टफोन आमतौर पर इस संपत्ति का समर्थन करते हैं और डेस्कटॉप ब्राउज़र नहीं करते हैं।

EDIT: जैसा कि @Gajus ने बताया है, यह समाधान अब हटा दिया गया है और इसका उपयोग नहीं किया जाना चाहिए ( https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation )


14
यह वास्तव में सुपर अनोखा और भयानक है, क्या आपको बुरा लगता है अगर मैं इसे अपने जवाब में जोड़ दूं?
माइकल ज़ापोरोज़ेत्स

77
यह शायद लंबे समय तक काम करने वाला नहीं है। 1) टैबलेट में सभ्य स्क्रीन आकार हो सकते हैं, आप चाहते हैं कि वे पूर्ण डेस्कटॉप वेबसाइट प्रदर्शित करें, लेकिन उनके पास यह संपत्ति 2 होगी) विंडोज 8 यहां है और इसके साथ टच स्क्रीन और घूमने वाली स्क्रीन के साथ लैपटॉप का एक गुच्छा है।
डेव हिल्डिच

10
सभ्य स्क्रीन आकार के साथ गोलियाँ के बारे में अपने पहले बिंदु के लिए- मुझे लगता है कि आप अन्य सभी समाधानों के लिए भी यही तर्क दे सकते हैं (बड़ी स्क्रीन के साथ टैबलेट जिसे छोटे परदे के रूप में ट्रैक किया गया है)। वैसे भी यहाँ विचार संपत्ति के लिए खोज करना है जो कि मेन्टेंस लॉन्ग कोड रखने के बजाय छोटे उपकरणों द्वारा साझा किया गया है और प्रत्येक नए आने वाले डिवाइस / वेशन / मॉडल के साथ रेगेक्स जोड़ें। मुझे लगता है कि डिवाइस डिटेक्शन अतीत से संबंधित है और आज हमें फीचर डिटेक्शन पर ध्यान देने की जरूरत है। फिर से मुझे इस बात के लिए और अधिक उपयुक्त संपत्ति के बारे में खुशी होगी ...
yoav barnea

2
इसे प्यार करता हूँ और पूरी तरह से काम करता है, धन्यवाद। मेरे समाधान के लिए मैं बस सरल के बाद था।
बोजैंगल्स

40
window.orientationएक पदावनत संपत्ति है ( developer.mozilla.org/en-US/docs/Web/API/Window/orientation , compat.spec.whatwg.org/#dom-window-orientation ) कुछ मोबाइल ब्राउज़र अज्ञात कारणों से समर्थन के लिए चुनते हैं । समान ब्राउज़र कार्यान्वित होते हैं window.screen.orientation(जो डेस्कटॉप ब्राउज़र में भी परिभाषित किया गया है)। मैं केवल यह मान सकता हूं कि window.orientationविरासत के कारणों से इसे छोड़ दिया गया है और इसलिए इसे नए अनुप्रयोगों में उपयोग नहीं किया जाना चाहिए।
गजस

115
var isMobile = {
    Android: function() {
        return navigator.userAgent.match(/Android/i);
    },
    BlackBerry: function() {
        return navigator.userAgent.match(/BlackBerry/i);
    },
    iOS: function() {
        return navigator.userAgent.match(/iPhone|iPad|iPod/i);
    },
    Opera: function() {
        return navigator.userAgent.match(/Opera Mini/i);
    },
    Windows: function() {
        return navigator.userAgent.match(/IEMobile/i) || navigator.userAgent.match(/WPDesktop/i);
    },
    any: function() {
        return (isMobile.Android() || isMobile.BlackBerry() || isMobile.iOS() || isMobile.Opera() || isMobile.Windows());
    }
};

कैसे इस्तेमाल करे

if( isMobile.any() ) alert('Mobile');

यह देखने के लिए जांचें कि उपयोगकर्ता किसी विशिष्ट मोबाइल डिवाइस पर है या नहीं:

if( isMobile.iOS() ) alert('iOS');

रेफरी: http://www.abeautifulsite.net/blog/2011/11/detecting-mobile-devices-with-wavavcript

जीथब पर वर्धित संस्करण: https://github.com/smali-kazmi/detect-mobile-browser


any()ओर्डेड isMobileसदस्यों के पाश में ... के लिए क्यों नहीं ?
SomeShinyObject

@ChristopherW मैंने आपके प्लगइन और संशोधित कोड बनाया था जैसा कि आपने सलाह दी थी
मुदस्सर अली

2
हो सकता है कि आईओएस ब्लैकबेरी से आगे बढ़ें () बस पहले और अधिक सामान्य मामलों को रखने के लिए और शुरुआती खैरात को कुछ अतिरिक्त प्रसंस्करण को बचाने दें?
Rob_vH

2
@Rob_vH ने कुछ अग्रिम विशेषताओं के साथ इस कोड को github ( github.com/smali-kazmi/detect-mobile-browser ) में डाला था ; आप वहां भी सुझाव भेजने के लिए खुले हैं
मडसर अली

1
@AkarshSatija क्या उन 5 रेगेक्स चेक से प्रदर्शन ड्रॉप वास्तव में आपके किसी भी एप्लिकेशन को प्रभावित करता है? मुझे बहुत आश्चर्य होगा अगर यह हुआ। समयपूर्व अनुकूलन समय की बर्बादी हो सकता है ...
trusktr

68

यहाँ फेसबुक के गुलेल के स्रोत से एक सरल समाधान है

var isMobile = /iPhone|iPad|iPod|Android/i.test(navigator.userAgent);
if (isMobile) {
  /* your code here */
}

अच्छा लगा। कुछ स्थितियों में बहुत उपयोगी है
चक ले बट

एक डिवाइस का पता लगाने के मामले के लिए उपयोगी है जहां एक मोबाइल ऐप इंस्टॉल किया जा सकता है। आप ब्राउज़र के बारे में परवाह नहीं है, प्रति से। बस डिवाइस / ओएस।
चार्ली रिट्जेल

30

यहां "टच स्क्रीन डिवाइसेस" का पता लगाने के लिए एक सरल, स्वच्छ तरीके की तलाश में आया, जिसे मैं मोबाइल और टैबलेट के रूप में वर्गीकृत करता हूं। वर्तमान उत्तरों में एक स्वच्छ विकल्प नहीं मिला, लेकिन निम्न कार्य किया, जो किसी की मदद भी कर सकता है।

var touchDevice = ('ontouchstart' in document.documentElement);

संपादित करें : एक ही समय में टच स्क्रीन और मोबाइल के साथ डेस्कटॉप का समर्थन करने के लिए आप निम्नलिखित का उपयोग कर सकते हैं:

var touchDevice = (navigator.maxTouchPoints || 'ontouchstart' in document.documentElement);

9
क्या होगा अगर डेस्कटॉप का मॉनिटर स्पर्श का समर्थन करता है?
एंटन कुज़मिन

@HappyCoder का मानना ​​है कि यह ओएस पर निर्भर है कि वह ब्राउज़र को बताए कि डेस्कटॉप पर टच स्क्रीन कब सक्रिय है। तो, हाँ यह चेक अभी भी मान्य होना चाहिए।
टाइगर

(+1), हालाँकि, मेरा डेस्कटॉप अब मैं टचस्क्रीन का उपयोग कर रहा हूं, और यह हमेशा के लिए संगत नहीं है touchstart|end|etc
कोडी

1
बूटस्ट्रैप डेटपिकर निम्नलिखित का उपयोग करता है: यदि (window.navigator.msMaxTouchPoints; 'ontouchstart' दस्तावेज़ में) {this.input.blur (); }
जेटी टेलर

1
@JTTaylor ऐसा लगता है कि Microsoft अनुशंसा कर रहा है navigator.maxTouchPoints (कोई msउपसर्ग नहीं )। जाँच करने के लिए एक MDN लेख भी है ।
टाइगर

19

जैसा कि कई ने कहा है, उपयोगकर्ता एजेंट डेटा के बढ़ते लक्ष्य पर भरोसा करना समस्याग्रस्त है। स्क्रीन के आकार पर गिनती के लिए भी ऐसा ही कहा जा सकता है।

इंटरफ़ेस छूने पर निर्धारित करने के लिए मेरा दृष्टिकोण CSS तकनीक से उधार लिया गया है:

केवल जावास्क्रिप्ट (सभी आधुनिक ब्राउज़रों द्वारा समर्थन) का उपयोग करके, एक मीडिया क्वेरी मैच आसानी से पता लगा सकता है कि क्या डिवाइस मोबाइल है

function isMobile() {
    var match = window.matchMedia || window.msMatchMedia;
    if(match) {
        var mq = match("(pointer:coarse)");
        return mq.matches;
    }
    return false;
}

6
टच सक्षम डिस्प्ले वाले लैपटॉप के बारे में क्या?
मैक्सिम

6
मैं जांच करूंगा! माचिमेडिया ("(कोई-सूचक: ठीक है)")। अपने आप से मेल खाता है। ("कोई माउस प्लग इन नहीं हुआ" के बजाय "एक टच स्क्रीन है"।
Sora2455

यह काम करता है जबकि मेरी पिछली स्क्रिप्ट ब्राउज़र की ज़ूम सुविधा का उपयोग करते हुए लोगों द्वारा छल की जाएगी (उदाहरण के लिए एक लड़का जिसकी मैं 13 "स्क्रीन पर 4K के साथ बात कर रहा था जो 1080p तक गिर गया था और अभी भी ज़ूम का उपयोग करना था)। मेरे iPhone (सफारी /) पर काम किया। फ़ायरफ़ॉक्स) और एंड्रॉइड डिवाइस (वाटरफॉक्स / क्रोम / "ब्राउज़र")। निश्चित रूप से सभी उच्च-मतदान उत्तरों की तुलना में बहुत अधिक विश्वसनीय।
जॉन

एंड्रॉइड पर फ़ायरफ़ॉक्स फेनेक का पता नहीं लगाता है जिसके लिए मैंने navigator.userAgent.toLowerCase ()। indexOf ('fennec')> -1 (शायद सबसे अच्छा पूरक नहीं है) के साथ पूरक किया है
StayCool

2
: (मोटे सूचक): स्मार्ट फ़ोन और टचस्क्रीन @media के लिए (मंडराना: कोई नहीं) और Additionnally आप मंडराना संपत्ति परीक्षण कर सकते हैं
Batailley

16

उपयोगकर्ता एजेंट का उपयोग करके ब्राउज़र का पता लगाने पर एमडीएन के लेख के अनुसार , यदि संभव हो तो इस दृष्टिकोण से बचने के लिए प्रोत्साहित किया जाता है और इस तरह की सुविधा का पता लगाने के लिए अन्य रास्ते सुझाए जाते हैं।

हालाँकि, अगर किसी को डिवाइस का मोबाइल होने पर पता लगाने के लिए उपयोगकर्ता एजेंट का उपयोग करना चाहिए, तो वे सुझाव देते हैं:

सारांश में, हम एक मोबाइल डिवाइस का पता लगाने के लिए उपयोगकर्ता एजेंट में कहीं भी स्ट्रिंग "मोबी" की तलाश करने की सलाह देते हैं।

इसलिए, यह एक-लाइनर पर्याप्त होगा:

const isMobileDevice = window.navigator.userAgent.toLowerCase().includes("mobi");

[अपडेट करें]:

जैसा कि @ zenw0lf टिप्पणियों में सुझाव देता है, एक नियमित अभिव्यक्ति का उपयोग करना बेहतर होगा:

const isMobileDevice = /Mobi/i.test(window.navigator.userAgent)


.includesआईओ -11 द्वारा सोपपोर्ट नहीं
पाशा

1
@PashaOleynik एक पॉलीफ़िल ठीक कर सकता है
मैक्सिम

एंड्रॉइड के साथ नेक्सस 7 टैबलेट Mobileमें यूजर एजेंट स्ट्रिंग नहीं है
एलेक्स सोरोकोलेटोव

@AlexSorokoletov MDN लेख के लिए भीIf the device is large enough that it's not marked with “Mobi”, you should serve your desktop site (which, as a best practice, should support touch input anyway, as more desktop machines are appearing with touchscreens).
TheDarkIn1978

1
मुझे लगता है कि यह const isMobile = /Mobi/.test(window.navigator.userAgent)
पॉलीफ़िल के

14

यह पता लगाने के लिए कोई सटीक समाधान नहीं है कि जेएस कोड एक मोबाइल ब्राउज़र पर निष्पादित किया जाता है, लेकिन निम्नलिखित दो विकल्पों को ज्यादातर मामलों में काम करना चाहिए।

विकल्प 1: ब्राउज़र सूँघना

!function(a){var b=/iPhone/i,c=/iPod/i,d=/iPad/i,e=/(?=.*\bAndroid\b)(?=.*\bMobile\b)/i,f=/Android/i,g=/(?=.*\bAndroid\b)(?=.*\bSD4930UR\b)/i,h=/(?=.*\bAndroid\b)(?=.*\b(?:KFOT|KFTT|KFJWI|KFJWA|KFSOWI|KFTHWI|KFTHWA|KFAPWI|KFAPWA|KFARWI|KFASWI|KFSAWI|KFSAWA)\b)/i,i=/IEMobile/i,j=/(?=.*\bWindows\b)(?=.*\bARM\b)/i,k=/BlackBerry/i,l=/BB10/i,m=/Opera Mini/i,n=/(CriOS|Chrome)(?=.*\bMobile\b)/i,o=/(?=.*\bFirefox\b)(?=.*\bMobile\b)/i,p=new RegExp("(?:Nexus 7|BNTV250|Kindle Fire|Silk|GT-P1000)","i"),q=function(a,b){return a.test(b)},r=function(a){var r=a||navigator.userAgent,s=r.split("[FBAN");return"undefined"!=typeof s[1]&&(r=s[0]),s=r.split("Twitter"),"undefined"!=typeof s[1]&&(r=s[0]),this.apple={phone:q(b,r),ipod:q(c,r),tablet:!q(b,r)&&q(d,r),device:q(b,r)||q(c,r)||q(d,r)},this.amazon={phone:q(g,r),tablet:!q(g,r)&&q(h,r),device:q(g,r)||q(h,r)},this.android={phone:q(g,r)||q(e,r),tablet:!q(g,r)&&!q(e,r)&&(q(h,r)||q(f,r)),device:q(g,r)||q(h,r)||q(e,r)||q(f,r)},this.windows={phone:q(i,r),tablet:q(j,r),device:q(i,r)||q(j,r)},this.other={blackberry:q(k,r),blackberry10:q(l,r),opera:q(m,r),firefox:q(o,r),chrome:q(n,r),device:q(k,r)||q(l,r)||q(m,r)||q(o,r)||q(n,r)},this.seven_inch=q(p,r),this.any=this.apple.device||this.android.device||this.windows.device||this.other.device||this.seven_inch,this.phone=this.apple.phone||this.android.phone||this.windows.phone,this.tablet=this.apple.tablet||this.android.tablet||this.windows.tablet,"undefined"==typeof window?this:void 0},s=function(){var a=new r;return a.Class=r,a};"undefined"!=typeof module&&module.exports&&"undefined"==typeof window?module.exports=r:"undefined"!=typeof module&&module.exports&&"undefined"!=typeof window?module.exports=s():"function"==typeof define&&define.amd?define("isMobile",[],a.isMobile=s()):a.isMobile=s()}(this);

alert(isMobile.any ? 'Mobile' : 'Not mobile');

यह विशेष रूप से ब्राउज़र सूँघने का कोड एक पुस्तकालय है जिसे आईमोबाइल कहा जाता है


विकल्प 2: window.orientation

टेस्ट अगर window.orientationपरिभाषित किया गया है:

var isMobile = window.orientation > -1;
alert(isMobile ? 'Mobile' : 'Not mobile');


ध्यान दें

सभी टचस्क्रीन डिवाइस मोबाइल और इसके विपरीत नहीं हैं। इसलिए, यदि आप विशेष रूप से टचस्क्रीन के लिए कुछ लागू करना चाहते हैं, तो आपको यह परीक्षण नहीं करना चाहिए कि आपका ब्राउज़र किसी मोबाइल डिवाइस पर चलाया गया है या नहीं, लेकिन क्या डिवाइस में टचस्क्रीन समर्थन है:

var hasTouchscreen = 'ontouchstart' in window;
alert(hasTouchscreen ? 'has touchscreen' : 'doesn\'t have touchscreen');


ओरिएंटेशन दृष्टिकोण वास्तव में अच्छा है! ))
मैक्सिम

1
मुझे आपका window.orientationसमाधान पसंद है , लेकिन डॉक्स का कहना है कि यह पदावनत है! developer.mozilla.org/en-US/docs/Web/API/Window/orientation
skwidbreth

3
ओरिएंटेशन दृष्टिकोण अच्छा नहीं है क्योंकि विंडोज 8 और उच्चतर अभिविन्यास बदल सकते हैं।
हेगिट

विंडोज 8 और नया मोबाइलों के लिए समर्थन जोड़ने पर केंद्रित है, लेकिन साथ ही संकर (लैपटॉप जो बड़े पैड में बदल सकते हैं) जो कि अभिविन्यास का पता लगाने की विधि के रूप में विफल रहता है, भले ही moz पदावनत नहीं था।
जेफ क्लेटन

यह जीत 7 से है, जिसमें ग्राफिकल सॉफ्टवेयर स्थापित है, अभिविन्यास को बदल सकता है, लेकिन अपने आप से एक सवाल पूछ सकता है, जो डेस्कटॉप / लैपटॉप पर लैंडस्केप के बजाय पोर्ट्रेट की तरह एक और स्क्रीन ओरिएंटेशन का उपयोग कर सकता है और मैं 1 मिनट से भी अधिक समय तक उपयोग कर सकता हूं। कोई नहीं !!! डेस्कटॉप पर अभिविन्यास बदलने का मतलब है कि आप अपनी स्क्रीन पर नीचे से ऊपर तक वर्ण पढ़ना शुरू करेंगे।
गर्लकोड

11

यहाँ एक userAgent समाधान है जो मैच से अधिक प्रभावशाली है ...

function _isMobile(){
    // if we want a more complete list use this: http://detectmobilebrowsers.com/
    // str.test() is more efficent than str.match()
    // remember str.test is case sensitive
    var isMobile = (/iphone|ipod|android|ie|blackberry|fennec/).test
         (navigator.userAgent.toLowerCase());
    return isMobile;
}

7
परीक्षण विधि संवेदनशील नहीं है, लेकिन आपका रेगेक्स है। तुम अंत में एक "मैं" के साथ मामले असंवेदनशील regex के लिए झंडा और कर सकते हैं/iphone|etc/i.test(navigator.userAgent)
xec

11

नियंत्रण की एक अतिरिक्त परत जोड़ने के लिए मैं यह पता लगाने के लिए कि यह मोबाइल स्टोरेज या डेस्कटॉप स्टोरेज का उपयोग कर रहा है, HTML5 स्टोरेज का उपयोग करता है। यदि ब्राउज़र भंडारण का समर्थन नहीं करता है, तो मेरे पास मोबाइल ब्राउज़र नामों की एक सरणी है और मैं सरणी में ब्राउज़र के साथ उपयोगकर्ता एजेंट की तुलना करता हूं।

यह बहुत सरल है। यहाँ समारोह है:

// Used to detect whether the users browser is an mobile browser
function isMobile() {
    ///<summary>Detecting whether the browser is a mobile browser or desktop browser</summary>
    ///<returns>A boolean value indicating whether the browser is a mobile browser or not</returns>

    if (sessionStorage.desktop) // desktop storage 
        return false;
    else if (localStorage.mobile) // mobile storage
        return true;

    // alternative
    var mobile = ['iphone','ipad','android','blackberry','nokia','opera mini','windows mobile','windows phone','iemobile']; 
    for (var i in mobile) if (navigator.userAgent.toLowerCase().indexOf(mobile[i].toLowerCase()) > 0) return true;

    // nothing found.. assume desktop
    return false;
}

3
मैंने अभी तक मोबाइल पर परीक्षण नहीं किया है, लेकिन sessionStorage.desktopसफारी, क्रोम, या फ़ायरफ़ॉक्स (पोस्ट के समय सभी नवीनतम संस्करण) में मौजूद नहीं है। आपको हालांकि एक वोट मिलता है, क्योंकि आपका समाधान दूसरों की तुलना में बेहतर दिशा में जाता है। लेकिन var mobile =इसके बजाय का उपयोग करने के लिए मत भूलना mobile =
शुकस्टर

3
इसके अलावा पुराने ब्राउज़रों के साथ इंडेक्सऑफ का उपयोग नहीं करने का एक अच्छा विचार अभी भी है जो उस पद्धति का समर्थन नहीं करता है, या पॉलीफिल का उपयोग नहीं करता है। लोअरकेस मानों की सूची में toLowerCase का उपयोग करना आवश्यक नहीं है, और न ही ऐसा करने के लिए आवश्यक है यदि आप धीमे-धीमे के बजाय /ipadipiphone.netetc/i.test(navigator.userAgent) चला रहे हैं।
जेफरी गिल्बर्ट

10

फ़ीचर डिटेक्शन यह जानने की कोशिश करने से बेहतर है कि आप किस डिवाइस पर हैं और हर समय बाहर आने वाले नए उपकरणों के साथ बने रहने के लिए बहुत मुश्किल है, मॉर्डनिज़्र जैसी एक लाइब्रेरी आपको बताती है कि कोई विशेष सुविधा उपलब्ध है या नहीं।


18
आपसे एक और सवाल का जवाब मांगा गया था। "मैं मोबाइल का पता कैसे लगा सकता हूं?" के बजाय, आपने उत्तर दिया "मैं कुछ विशेषताओं का पता कैसे लगा सकता हूं?"। सभी डिवाइस डिटेक्शन फीचर डिटेक्शन के लिए नहीं है। क्या होगा अगर हम उपकरणों के बारे में आंकड़े प्राप्त करना चाहते हैं? फिर नहीं, "फीचर डिटेक्शन" "डिवाइस का पता लगाने" से बहुत बेहतर नहीं है।
जोनाथन एलार्ड

1
यह उत्तर नहीं है, लेकिन यह सिर्फ एक टिप्पणी से अधिक का हकदार है। सवाल यह है: आप किसी ब्राउज़र का पता लगाना क्यों चाहते हैं और तब आप शायद इसे जानना चाहेंगे (कमी) केवल स्पर्श के कारण। उत्तरदायी Webdesign सबसे मामलों में नहीं तो सभी में पर्याप्त है।
दोगुना

8

इस जैसे किसी और के बारे में क्या राय है?

if(
    (screen.width <= 640) || 
    (window.matchMedia && 
     window.matchMedia('only screen and (max-width: 640px)').matches
    )
  ){
   // Do the mobile thing
}

screen.widthइसके बजाय सिर्फ उपयोग क्यों नहीं ? यह मुझे लगता है कि की तुलना में अधिक विश्वसनीय है window.matchMedia
जॉन सलेगर्स 12:30

अच्छा बिंदु जॉन, मैं ठीक से याद नहीं कर सकता कि मैं उस समय क्या सोच रहा था, यह संभावना नहीं लगती है (अब इसे देखते हुए) कि दूसरा खंड सही हो जाएगा यदि पहला झूठ है। वहाँ कुछ कारण है, हालांकि मैं इसे जोड़ा जाएगा।
स्टुजो

अधिकांश सभ्य प्रोग्रामर को शर्म आती है जब वे कोड देखते हैं जो उन्होंने खुद एक साल पहले लिखा था। जो सिर्फ प्रोग्रामर के रूप में नहीं बढ़े हैं ;-)
जॉन सेलर्स

4
विंडो रिज़ॉल्यूशन का इस बात से कोई लेना-देना नहीं है कि ब्राउज़र मोबाइल डिवाइस पर है या नहीं। उदाहरण के लिए, बहुत सारे डेस्कटॉप ब्राउजर नॉन-फुल स्क्रीन विंडो में चलते हैं। यदि आप उन ब्राउज़र में हैंडहेल्ड स्क्रीन के लिए डिज़ाइन किया गया UI प्रस्तुत करते हैं, तो उनके उपयोगकर्ताओं को निराशा का अनुभव होने वाला है।
s16oɈ

1
@ जॉन्सेज़र्स - मैं ज्यादातर एक सवाल पर शर्मिंदा हूं और स्टैकओवरफ्लो पर अपना जवाब ढूंढ रहा हूं। बार बार। मैं खुद
vsync

7

एक बार जब तत्व लाभ केंद्रित हो जाता है, तो आप तुरंत इसे धुंधला कर देते हैं। बूटस्ट्रैप-डेटपिकर, जो गीथहब में लगभग 10,000 सितारों के साथ एक बहुत लोकप्रिय और अच्छी तरह से बनाए रखा घटक है, इस विकल्प का उपयोग करता है:

if (window.navigator.maxTouchPoints || 'ontouchstart' in document) {
    this.input.blur();
}

https://github.com/uxsolutions/bootstrap-datepicker

सहायता के लिए टाइगर को धन्यवाद ।


7

मोबाइल या टैबलेट उपकरणों का पता लगाने का एक अच्छा तरीका यह है कि क्या ब्राउज़र एक टच ईवेंट बना सकता है।

सादा जावास्क्रिप्ट कोड:

function isMobile() {
   try{ document.createEvent("TouchEvent"); return true; }
   catch(e){ return false; }
}

if (isMobile()) {
   # do whatever you wanna do!
}

यह मेरे लिए वास्तव में अच्छी तरह से काम करता था, लेकिन लैपटॉप उपकरणों के साथ एक समस्या हो सकती है जिसमें टचस्क्रीन डिस्प्ले शामिल है।

मुझे यकीन नहीं है कि एक टचस्क्रीन लैपटॉप को मोबाइल डिवाइस के रूप में पहचाना जाएगा क्योंकि मैंने अभी तक इसका परीक्षण नहीं किया है।


5
मोबाइल डिवाइस के रूप में टच स्क्रीन लैपटॉप का पता लगाया जाएगा। साथ ही डेस्कटॉप के लिए टच स्क्रीन मॉनिटर। मानो या न मानो, आप भी इस मुद्दे पर चलेंगे यदि आप टचस्क्रीन डिवाइस का उपयोग आरडीपी को किसी अन्य डिवाइस में कर रहे हैं जिसमें टच स्क्रीन नहीं है।
ब्लिसफुल

@blissfool मुझे लगता है कि यह मोबाइल उपकरणों का पता लगाने के लिए सही तरीका नहीं होगा।
नियो मोरिना

दुर्भाग्यवश नहीं। लेकिन, यह अभी भी बहुत सीमित उपयोग के मामले के लिए एक व्यवहार्य विकल्प हो सकता है।
ब्लिसफुल

कोड कभी न लिखें, जो एक अपवाद पर आधारित है, जिसे किसी भी मामले में सुनिश्चित किया जाएगा ...
पाब्लो

@ सिविक केवल तभी फेंका जाता है जब एक टचवेंट मौजूद नहीं होता है और ऊपर दिया गया कोड इसे पकड़ लेता है और गलत रिटर्न देता है। मोबाइल या टेबलेट या अन्य टच स्क्रीन उपकरणों पर ऐसा नहीं है।
नियो मोरिना

5

यहाँ समस्या के लिए मेरा फिर से सोचा समाधान है। अभी भी सही नहीं है। एकमात्र सही समाधान यह होगा कि डिवाइस निर्माता "मोबाइल" और "टैबलेट" उपयोगकर्ता-एजेंट के तारों को गंभीरता से लेना शुरू कर दें।

window.onload = userAgentDetect;
function userAgentDetect() {
  if(window.navigator.userAgent.match(/Mobile/i)
  || window.navigator.userAgent.match(/iPhone/i)
  || window.navigator.userAgent.match(/iPod/i)
  || window.navigator.userAgent.match(/IEMobile/i)
  || window.navigator.userAgent.match(/Windows Phone/i)
  || window.navigator.userAgent.match(/Android/i)
  || window.navigator.userAgent.match(/BlackBerry/i)
  || window.navigator.userAgent.match(/webOS/i)) {
    document.body.className += ' mobile';
    alert('True - Mobile - ' + navigator.userAgent);
  } else {
    alert('False - Mobile - ' + navigator.userAgent);
  }
  if(window.navigator.userAgent.match(/Tablet/i)
  || window.navigator.userAgent.match(/iPad/i)
  || window.navigator.userAgent.match(/Nexus 7/i)
  || window.navigator.userAgent.match(/Nexus 10/i)
  || window.navigator.userAgent.match(/KFAPWI/i)) {
    document.body.className -= ' mobile';
    document.body.className += ' tablet';
    alert('True - Tablet - ' + navigator.userAgent);
  } else {
    alert('False - Tablet - ' + navigator.userAgent);
  }
}

क्या होता है जब Nexus 7 टैबलेट में केवल Android UA स्ट्रिंग होता है? सबसे पहले, मोबाइल सच हो जाता है, बाद में टैबलेट पर भी सच हो जाता है, लेकिन टैबलेट मोबाइल यूए स्ट्रिंग को शरीर के टैग से हटा देगा।

सीएसएस:

body.tablet { background-color: green; }
body.mobile { background-color: red; }

alertविकास के लिए लाइनें जोड़ी गईं। क्रोम कंसोल कई हैंडहेल्ड डिवाइसों का अनुकरण कर सकता है। वहां परीक्षण करें।

संपादित करें:

बस इसका उपयोग न करें, इसके बजाय सुविधा पहचान का उपयोग करें। वहाँ बहुत सारे उपकरण और ब्रांड हैं जो एक ब्रांड को लक्षित करने के लिए सही समाधान होंगे।


4

मैं आपको http://wurfl.io/ की जांच करने की सलाह देता हूं

संक्षेप में, यदि आप एक छोटी JS फाइल आयात करते हैं:

<script type='text/javascript' src="//wurfl.io/wurfl.js"></script>

आपको एक JSON ऑब्जेक्ट के साथ छोड़ दिया जाएगा जो दिखता है:

{
 "complete_device_name":"Google Nexus 7",
 "is_mobile":true,
 "form_factor":"Tablet"
}

(यह मानकर कि आप एक नेक्सस 7 का उपयोग कर रहे हैं, निश्चित रूप से) और आप ऐसा करने में सक्षम होंगे:

if(WURFL.form_factor == "Tablet"){
    //dostuff();
}

यह वही है जो आप ढूंढ रहे हैं।

अस्वीकरण: मैं उस कंपनी के लिए काम करता हूं जो यह मुफ्त सेवा प्रदान करती है। धन्यवाद।


1
और यह iphone पर सफारी को कैसे नहीं पहचानता है?
एमीथ

क्या आप इस बात पर विस्तार कर सकते हैं कि आप किस ब्राउज़र का उपयोग कर रहे हैं (सटीक यूए स्ट्रिंग सही होगा), आपको कौन सा डेटा मिल रहा है और आप क्या उम्मीद कर रहे हैं?
लुका पासानी

मैं भी wurfl की कोशिश की, मैं एक iPhone 5C IOS 11.2 चल रहा है। यह सफारी को मोबाइल ब्राउजर के रूप में मान्यता नहीं दे रहा है। मैं "is_mobile" का उपयोग करने की उम्मीद कर रहा हूं: यह सच है और फिर "form_factor": स्मार्टफ़ोन और इसके वापस नहीं आने पर।
माइक वेल्स 16

मुझे कंपनी में मोबाइल डेटा गुरुओं की ओर मुड़ना पड़ा और उन्होंने मुझे बताया कि OS 11.2 5C पर नहीं चलता है। सबसे कम डिवाइस 5S है। तो आपने जो लिखा है उसमें कुछ सही नहीं है। जहां डिस्कनेक्ट हो सकता है, यह सत्यापित करने के लिए वैज्ञानिकमोबाइल से ऑफ़लाइन संपर्क करें। धन्यवाद
लुका पासानी


3

उपयोग के मामले पर निर्भर करता है। सभी मोबाइल उपकरणों में बैटरी की आवश्यकता होती है। अगर आपके पास बैटरी खत्म करने के बाद बैटरी की स्थिति एपीआई का उपयोग किए बिना बिजली की गणना होती है, तो :

navigator.getBattery().then(battery => {
  battery.charging ? 'charging' : 'not charging';
});

यदि आप जो खोज रहे हैं वह प्रेजेंटेशनल उपयोग है matchMedia, जो एक बूलियन मान लौटाता है:

if (window.matchMedia("(min-width: 400px)").matches) {
  /* the viewport is at least 400 pixels wide */
} else {
  /* the viewport is less than 400 pixels wide */
}

या उन्हें टैबलेट डिवाइस पर बेहतर उपयोगकर्ता अनुभव के लिए संयोजित करें।


ध्यान दें कि बैटर स्टेटस एपीआई को ब्राउजर से हटाया जा रहा है।
सोरा 2455

बैटरी स्टेटस API फ़ायरफ़ॉक्स से हटा दिया गया है लेकिन जुलाई 2016 से W3C कैंडिडेट की सिफारिश बनी हुई है , यह लोकप्रिय ब्राउज़रों में काम करता है और उपयोगी है अनुभव को आकार देने में है।
जोश हबदास

2

यहाँ एक ECMAScript 6 समाधान (टाइपस्क्रिप्ट तैयार है)

public isMobile(): boolean {
  let check = false;
  ((a => {
      if (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino/i.test(a) || /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(a.substr(0, 4))) check = true;
      }))(navigator.userAgent || navigator.vendor);
  return check;
 }

सिर्फ ifइस पूरे checkचर के बजाय शर्त को वापस क्यों नहीं किया जाए ?
विक

2

यह पता लगाने के लिए सरल चाल है कि यह एक मोबाइल डिवाइस है या नहीं। बस जाँच करें कि क्या ontouchstart घटना मौजूद है:

function isMobile()
{
    return "ontouchstart" in window;
}

3
टचस्क्रीन मॉनिटर के साथ लैपटॉप और डेकोस्टॉप के साथ काम नहीं करेंगे। हाइब्रिड पीसी की तरह सरफेस के साथ भी एक मुद्दा होगा। डेस्कटॉप के साथ कोई समस्या कम है लेकिन इन दिनों अधिक टचस्क्रीन लैपटॉप बेचे जा रहे हैं।
ब्लिसफुल

2

मुझे कुछ परिदृश्यों का सामना करना पड़ा है जहाँ उपरोक्त उत्तर मेरे लिए काम करते हैं। इसलिए मैं इसके साथ आया। किसी के लिए सहायक हो सकता है।

if(/iPhone|iPad|iPod|Android|webOS|BlackBerry|Windows Phone/i.test(navigator.userAgent)
 || screen.availWidth < 480){
//code for mobile
}

यह आपके उपयोग के मामले पर निर्भर करता है। यदि आप स्क्रीन उपयोग पर ध्यान केंद्रित करते हैं screen.availWidth, या document.body.clientWidthयदि आप दस्तावेज़ के आधार पर प्रस्तुत करना चाहते हैं तो आप इसका उपयोग कर सकते हैं ।


1

सबसे अच्छा होना चाहिए:

var isMobile = (/Mobile/i.test(navigator.userAgent));

लेकिन जैसे योव बरनेया कहते हैं ...

// Seem legit
var isMobile = ('DeviceOrientationEvent' in window || 'orientation' in window);
// But with my Chrome on windows, DeviceOrientationEvent == fct()
if (/Windows NT|Macintosh|Mac OS X|Linux/i.test(navigator.userAgent)) isMobile = false;
// My android have "linux" too
if (/Mobile/i.test(navigator.userAgent)) isMobile = true;

इस 3 परीक्षणों के बाद, मुझे उम्मीद है कि var isMobile है ... ठीक है


> एंड्रॉइड पर फ़ायरफ़ॉक्स मोबाइल में विंडो में "'ओरिएंटेशन' नहीं है
molokoloco

1
माफ़ करना .. ठीक है मेरे लिए यह अब ठीक है। "if (Modernizr.touch) / * ... * /" और चलें ...
molokoloco

बस सोच रहा था कि टचस्क्रीन डेस्कटॉप डिवाइस पर मॉर्डनाइज ट्रे कैसे काम करेगा।
B2K

इसे और अधिक सुरुचिपूर्ण बनाने के लिए आपको सभी टी कोड केवल एक में बनाना चाहिए-अगर और-तो ब्लॉक।
हेक्टर

1

यहाँ वह पूरा समारोह है

function isMobile(){
    return (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|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|android|ipad|playbook|silk/i.test(navigator.userAgent||navigator.vendor||window.opera)||/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||navigator.vendor||window.opera).substr(0,4)))
}

jQuery.noConflict();
jQuery(document).ready(function(){
    if(isMobile()) alert("Mobile"); else alert("Not Mobile");
});

.substr (0,4) पहले 4 अक्षर देता है। यह "एंड्रॉइड + मोबाइल" का पता कैसे लगाता है?
21

1
@raacer के जवाब में वास्तव में दो रेगेक्स हैं (दोनों एक ही पंक्ति पर) - पहला यूए स्ट्रिंग के खिलाफ जांच करता है, और एंड्रॉइड, मोबाइल आदि की तलाश करता है, जबकि दूसरा केवल यूए के पहले 4 अक्षरों के खिलाफ जांच करता है ।
जैकडब्ल्यू

1
//true / false
function isMobile()
{
   return (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ); 
}

भी आप एक विशिष्ट मोबाइल का पता लगाने के लिए इस ट्यूटोरियल का अनुसरण कर सकते हैं। यहां क्लिक करें


कृपया Mobileअपने RX
oriadam

1

"window.screen.width" का उपयोग करने के बारे में क्या?

if (window.screen.width < 800) {
// do something
}

या

if($(window).width() < 800) {
//do something
}

मुझे लगता है कि यह सबसे अच्छा तरीका है क्योंकि हर दिन एक नया मोबाइल डिवाइस है!

(हालांकि मुझे लगता है कि यह पुराने ब्राउज़रों में समर्थित नहीं है, लेकिन इसे आज़माएं :))


1
परिदृश्य के बारे में क्या है?
एरिक वूडू

1
यह कुछ परिदृश्यों के लिए बहुत उपयोगी नहीं है। यदि डेस्कटॉप ब्राउज़र का आकार बदल दिया जाता है, तो शायद उसे मोबाइल ब्राउज़र के रूप में गलत तरीके से पता चला है
toing_toing

एक पीसी अनिवार्य रूप से प्रयोज्य, भयावह जवाब पर मोबाइल उपकरणों से अलग है !!
हेक्टर

1

ध्यान दें कि अधिकांश नए-जीन मोबाइल उपकरणों में अब 600x400 से अधिक रिज़ॉल्यूशन हैं। यानी, एक आईफोन 6 ...।

परीक्षण का प्रमाण: एक बार फिर से चलाए जा रहे एक वैकल्पिक चेक के साथ, सबसे ऊपर और सबसे हाल की पोस्टों को यहां चलाया गया:

(function(a){
    window.isMobile = (/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino/i.test(a)||/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(a.substr(0,4)))
})(navigator.userAgent||navigator.vendor||window.opera);

alert("This browser was found to be a % browser.", window.isMobile ? 'mobile' : 'desktop');

किसी तरह, निम्न परिणाम निम्न ब्राउज़र ऐप्स पर वापस कर दिए गए थे। चश्मा: iPhone 6S, iOS 10.3.1।

सफारी (नवीनतम): मोबाइल के रूप में इसका पता लगाया।

क्रोम (नवीनतम): मोबाइल के रूप में इसका पता नहीं लगा।

एसओ, मैंने तब लांटी ( https://stackoverflow.com/a/31864119/7183483 ) के सुझाव का परीक्षण किया , और इसने उचित परिणाम (सभी iOS उपकरणों के लिए मोबाइल, और मेरे मैक के लिए डेस्कटॉप) को वापस किया। इसलिए, मैं इसे थोड़ा संपादित करने के लिए आगे बढ़ा, क्योंकि यह दो बार (मोबाइल और टैबलेट दोनों के लिए) आग लगाएगा। मैंने तब देखा जब एक iPad पर परीक्षण किया, कि यह भी एक मोबाइल के रूप में लौटा, जो समझ में आता है, चूंकि पैरामीटर्स कि लांटीओएस का उपयोग करता है कुछ से अधिक की जाँच करें। इसलिए, मैंने केवल टेबलेट को मोबाइल चेक के अंदर IF स्टेटमेंट में स्थानांतरित किया है, जो कि मोबाइल को लौटाएगा टेबलेट की जांच नकारात्मक थी, और टैबलेट अन्यथा। मैंने तब डेस्कटॉप / लैपटॉप के रूप में लौटने के लिए मोबाइल चेक के लिए एक और क्लॉज जोड़ा, क्योंकि दोनों ही योग्य हैं, लेकिन फिर देखा कि ब्राउज़र सीपीयू और ओएस ब्रांड का पता लगाता है। तो मैंने कहा कि अगर बयान के बजाय वहाँ के हिस्से के रूप में वापस आ गया है। इसे कैप करने के लिए, मैंने मामले में सावधानी बरतने के अलावा कुछ और बयान दिया। बलो देखें, जल्द ही विंडोज 10 पीसी पर एक परीक्षण के साथ अपडेट होगा।

ओह, और मैंने भी आसानी से डिबग और सामान्य संकलन के बीच स्विच करने के लिए एक 'डीबग्मोड' चर जोड़ा।

Dislaimer: करने के लिए पूर्ण क्रेडिट Lanti , यह भी है कि इस विंडोज टेबलेट पर परीक्षण नहीं किया गया था ... जो डेस्कटॉप / लैपटॉप वापस कर सकती है, क्योंकि ओएस शुद्ध विंडोज है। एक बार मुझे एक मित्र मिल जाएगा जो एक का उपयोग करता है।

function userAgentDetect() {
    let debugMode = true;
    if(window.navigator.userAgent.match(/Mobile/i)
        || window.navigator.userAgent.match(/iPhone/i)
        || window.navigator.userAgent.match(/iPod/i)
        || window.navigator.userAgent.match(/IEMobile/i)
        || window.navigator.userAgent.match(/Windows Phone/i)
        || window.navigator.userAgent.match(/Android/i)
        || window.navigator.userAgent.match(/BlackBerry/i)
        || window.navigator.userAgent.match(/webOS/i)) {
        if (window.navigator.userAgent.match(/Tablet/i)
            || window.navigator.userAgent.match(/iPad/i)
            || window.navigator.userAgent.match(/Nexus 7/i)
            || window.navigator.userAgent.match(/Nexus 10/i)
            || window.navigator.userAgent.match(/KFAPWI/i)) {
            window.deviceTypeVar = 'tablet';
            if (debugMode === true) {
                alert('Device is a tablet - ' + navigator.userAgent);
            }
        } else {
            if (debugMode === true) {
                alert('Device is a smartphone - ' + navigator.userAgent);
            };
            window.deviceTypeVar = 'smartphone';
        }
    } else if (window.navigator.userAgent.match(/Intel Mac/i)) {
        if (debugMode === true) {
            alert('Device is a desktop or laptop- ' + navigator.userAgent);
        }
        window.deviceTypeVar = 'desktop_or_laptop';
    } else if (window.navigator.userAgent.match(/Nexus 7/i)
        || window.navigator.userAgent.match(/Nexus 10/i)
        || window.navigator.userAgent.match(/KFAPWI/i)) {
        window.deviceTypeVar = 'tablet';
        if (debugMode === true) {
            alert('Device is a tablet - ' + navigator.userAgent);
        }
    } else {
        if (debugMode === true) {
            alert('Device is unknown- ' + navigator.userAgent);
        }
        window.deviceTypeVar = 'Unknown';
    }
}

1

यह स्वीकृत उत्तर का केवल एक es6 पोर्ट है जिसे मैं अपने प्रोजेक्ट में उपयोग कर रहा हूं। ध्यान दें कि इसमें टैबलेट भी शामिल हैं।

export const isMobile = () => {
  const vendor = navigator.userAgent || navigator.vendor || window.opera;

  return !!(
    /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino|android|ipad|playbook|silk/i.test(
      vendor
    ) ||
    /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(
      vendor.substr(0, 4)
    )
  );
};


1

रेगेक्स का उपयोग करके ( detectmobilebrowsers.com से ):

/* eslint-disable */
export const IS_MOBILE = (function (a) {
  return (
    /(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|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|xda|xiino/i.test(a)||/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(
        a.substr(0,4)
      )
  )
  // @ts-ignore
})(navigator.userAgent || navigator.vendor || window.opera)
/* eslint-enable */

0

यह भी एक समाधान हो सकता है।

var isMobile = false; //initiate as false

  // device detection
  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))) isMobile = true;

  console.log('Mobile device:'+isMobile);

  var doc_h = $(document).height(); // returns height of HTML document
  var doc_w = $(document).width(); // returns width of HTML document
  console.log('Height: '+doc_h);
  console.log('width: '+doc_w);

  var iPadVertical = window.matchMedia("(width: 768px) and (height: 1024px) and (orientation: portrait)");
  var iPadHoricontal = window.matchMedia("(width: 1024px) and (height: 767px) and (orientation: landscape)");

  console.log('Height: '+doc_h);
  console.log('width: '+doc_w);

  if (iPadVertical.matches) {
      console.log('Ipad vertical detected');
  }else if (iPadHoricontal.matches){
      console.log('Ipad horicontal detected');
  }else {
      console.log('No Ipad');
  }

यदि आप दोनों तरीकों का उपयोग करते हैं, तो आपको विभिन्न उपकरणों का पता लगाने का एक सही तरीका मिलेगा।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.