একটি মোবাইল ব্রাউজার সনাক্ত করা হচ্ছে


888

আমি এমন একটি ফাংশন সন্ধান করছি যা ব্যবহারকারীর কাছে মোবাইল ব্রাউজার রয়েছে বা না থাকলে বুলেটিনের মান ফিরে আসে।

আমি জানি যে আমি navigator.userAgentরেগেক্স ব্যবহার করে সেই ফাংশনটি ব্যবহার করতে এবং লিখতে পারি, তবে ব্যবহারকারী-এজেন্টরা বিভিন্ন প্ল্যাটফর্মের জন্য খুব আলাদা। আমি সন্দেহ করি যে সমস্ত সম্ভাব্য ডিভাইসগুলির সাথে ম্যাচ করা সহজ হবে, এবং আমি মনে করি এই সমস্যাটি বহুবার আগেই সমাধান হয়ে গেছে সুতরাং এই জাতীয় কাজের জন্য এক ধরণের সম্পূর্ণ সমাধান হওয়া উচিত।

আমি এই সাইটের দিকে তাকিয়ে ছিলাম , তবে দুঃখের সাথে স্ক্রিপ্টটি এতটাই গুপ্ত যে এটি আমার উদ্দেশ্যে কীভাবে ব্যবহার করা যায় তা সম্পর্কে আমার কোনও ধারণা নেই, যা কোনও ফাংশন তৈরি করে যা সত্য / মিথ্যা প্রত্যাবর্তন করে।



2
এটি পড়ার চেষ্টা করুন। stackoverflow.com/questions/743129/...
KyelJmD

5
@ থ্রাস্টমাস্টার: সত্যিই তা হবে না। বিভিন্ন জেএসকে বিভিন্ন ব্রাউজারে পরিবেশন করার অর্থ আপনাকে Vary: User-Agentআপনার প্রতিক্রিয়া যুক্ত করতে হবে, অন্যথায় ক্যাশে প্রক্সিগুলি একটি সংস্করণ সংরক্ষণ করবে এবং এটি অন্য ধরণের ব্রাউজারে প্রেরণ করবে। তবে Vary: User-Agentপ্রতিক্রিয়া আইই তে অ্যাক্সেসযোগ্য করে তোলে।
ববিনস

16
@ ওয়েভ: একটি "মোবাইল" ব্রাউজার সনাক্ত করে আপনি কী করার চেষ্টা করছেন? পার্থক্যটি আজকের ট্যাবলেট এবং হাইব্রিড কম্পিউটিং ডিভাইসের বিশ্বে তর্কযোগ্য। আপনি কি ছোট পর্দাগুলি সনাক্ত করতে এবং সেই ক্ষেত্রে একটি আলাদা ইউআই উপস্থাপন করতে চান? আপনি কি নিম্ন-ব্যান্ডউইথ সংযোগটি সনাক্ত করতে খুঁজছেন? আপনি স্পর্শ ইন্টারফেস সনাক্ত করতে খুঁজছেন?
ববিনস

2
সুতরাং আমি আমার উত্তর আপডেট করেছি যা ডিটেমোমাইলব্রাউজারস ডটকম জাভাস্ক্রিপ্ট পদ্ধতিটি ব্যবহার করার জন্য তবে এখনও যদি কারও এটির প্রয়োজন হয় তবে একটি বুলিয়ান মানটি ফিরিয়ে দেব । (কেবলমাত্র ক্ষেত্রে) শুভ সনাক্তকরণ :)
মাইকেল জ্যাপোরোজেটস

উত্তর:


1316

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
হাই, আমি কেবলমাত্র আমার আইপ্যাড 3, আইওএস 6.1.2- এ ডিটেক্টমোবাইলব্রোজার.কম লিঙ্কটি পরিদর্শন করেছি এবং এটিতে "কোনও মোবাইল ব্রাউজার শনাক্ত করা হয়নি" বলে উল্লেখ করা হয়েছে।
রিচার্ড লাভজয়

49
@ রিচার্ডলভয়েজ সাইটগুলি তৈরি করার সময়, আইপ্যাডটিকে সাধারণত মোবাইল হিসাবে বিবেচনা করা হয় না।
মাইকেল জাপোরোজেটস

42
থেকে সম্পর্কে পৃষ্ঠা: Android ট্যাবলেট, আইপ্যাড, কিন্ডল আগুন ও PlayBooks নকশা দ্বারা সনাক্ত করা হয় না। ট্যাবলেটগুলির জন্য সমর্থন যুক্ত |android|ipad|playbook|silkকরতে, প্রথম রেজিজেটে যুক্ত করুন।
গ্রাস ডাবল

13
গুগল টিভিও অ্যান্ড্রয়েড। একটি মোবাইল সংজ্ঞা কি? পর্দার আকার? স্পর্শ ? ডিভাইস ওরিয়েন্টেশন? আমি যখন ডিজাইন করি তখন এটি মাউসওভারের প্রশ্ন বা না, বড় বাটন বা ছোট লিঙ্কগুলির আরও প্রশ্ন। সুতরাং, আপাতত, আমি "যদি (
মডার্নিজারআউটচুচ

30
গাওড, ব্যবহারকারী এজেন্টগুলির এই পুরো ধারণাটি ভয়াবহ এবং সত্যই, সত্যই বন্ধ হওয়া দরকার। আমাদের সত্যই ক্লায়েন্টদের জোয়ারের বিরুদ্ধে লড়াই করার অনুমতি দেওয়া বন্ধ করতে হবে এবং কেবল মিডিয়া প্রশ্নগুলি বদ্ধ থাকি। যদি তারা নির্দিষ্ট পৃষ্ঠাগুলির জন্য স্কেলের উপর ভিত্তি করে পুনঃনির্দেশগুলি করতে চান, তবে কেবল জেএসের
রিয়েটিং-

324

কেমন:

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

... যেহেতু স্মার্টফোনগুলি সাধারণত এই সম্পত্তিটিকে সমর্থন করে এবং ডেস্কটপ ব্রাউজারগুলি তা করে না।

সম্পাদনা: @ গাজাস উল্লেখ করেছেন যে, এই সমাধানটি এখন অবচয় করা হয়েছে এবং এটি ব্যবহার করা উচিত নয় ( https://developer.mozilla.org/en-US/docs/Web/API/Window/orientation )


14
এটি আসলে দুর্দান্ত অনন্য এবং দুর্দান্ত, আমি যদি আমার উত্তরে এটি যুক্ত করি তবে আপত্তি করবেন কি?
মাইকেল জ্যাপোরোজেটস

77
এটি সম্ভবত দীর্ঘকাল ধরে কাজ করে না। 1) ট্যাবলেটগুলিতে শালীন স্ক্রিনের আকার থাকতে পারে, আপনি তাদের পূর্ণ ডেস্কটপ ওয়েবসাইট প্রদর্শন করতে চান তবে তাদের এই সম্পত্তিটি থাকবে 2) উইন্ডোজ 8 এখানে রয়েছে এবং এর সাথে টাচ স্ক্রিন এবং স্ক্রিনগুলি ঘুরছে এমন একটি গুচ্ছ ল্যাপটপ রয়েছে।
ডেভ হিলিচ

10
শালীন স্ক্রিনের মাপযুক্ত ট্যাবলেটগুলি সম্পর্কে আপনার প্রথম বক্তব্য হিসাবে- আমি মনে করি আপনি অন্য সকল সমাধানের জন্যও একই যুক্তি তুলতে পারেন (ছোট পর্দার মতো ট্র্যাক করা বড় স্ক্রিনযুক্ত একটি ট্যাবলেট)। যাইহোক এখানে ধারণাটি হ'ল সম্পত্তিটি সন্ধান করা যা ছোট ডিভাইসগুলি ভাগ করে নেওয়ার পরিবর্তে মেইনট্যান্স লম্বা কোড রাখে এবং প্রতিটি নতুন আগত ডিভাইস / ভেনশন / মডেলটির সাথে রেজেক্স যুক্ত করে। আমি মনে করি ডিভাইস সনাক্তকরণ অতীতের অন্তর্ভুক্ত এবং আজ আমাদের বৈশিষ্ট্য সনাক্তকরণের উপর ফোকাস করা দরকার। আবার আমি এখানে এই বিষয়টির জন্য আরও উপযুক্ত সম্পত্তি সম্পর্কে খুশি হব ...
yoav barnea

2
ধন্যবাদ এবং পুরোপুরি কাজ করে, ধন্যবাদ। আমার সমাধানের জন্য আমি সহজ পরে ছিল।
বোজাঙ্গলেস

40
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.abe beautysite.net/blog/2011/11/detecting-momot-devices-with- জাভাস্ক্রিপ্ট

গিথুবে বর্ধিত সংস্করণ: https://github.com/smali-kazmi/detect-momot-browser


any()অর্ড isMobileসদস্যদের লুপের জন্য কেন ...
সোমারশাইনঅজেক্ট

@ ক্রিস্টোফারডাব্লু আমি আপনার প্লাগিনটি তৈরি করেছি এবং আপনার পরামর্শ অনুসারে সংশোধিত কোডটি তৈরি করেছেন
মুদাসের আলী

2
সম্ভবত আরও সাধারণ কেসগুলি প্রথমে রাখার জন্য এবং প্রথম দিকে বেলআউট কিছু অতিরিক্ত প্রক্রিয়াজাতকরণ বাঁচাতে ব্ল্যাকবেরি () এর আগে আইওএসকে এগিয়ে নিয়ে যেতে পারে?
রব_ভিএইচ

2
@ রব_ভিএইচ আমি এই কোডটি কিছু অগ্রিম বৈশিষ্ট্য সহ গিথুব ( github.com/smali-kazmi/detect-momot- ব্রাউজার ) এ রেখেছি ; আপনি সেখানে পরামর্শ প্রেরণের জন্যও উন্মুক্ত
মুদাসের আলী

1
@ আখরশতিজা those 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
যদি ডেস্কটপের মনিটর টাচ সমর্থন করে?
আন্তন কুজমিন

@ হ্যাপি কোডার আমি বিশ্বাস করি যে যখন কোনও ডেস্কটপে টাচ স্ক্রিন সক্রিয় থাকে তখন ব্রাউজারকে জানানো ওএসের কাজ। সুতরাং, হ্যাঁ এই চেকটি এখনও বৈধ হওয়া উচিত।
টাইগার

(+1) তবে, আমি এখন যে ডেস্কটপটি ব্যবহার করছি তার একটি টাচস্ক্রিন রয়েছে এবং এটি সর্বদা সুসংগত নয় touchstart|end|etc
কোডি

1
বুটস্ট্র্যাপ ডেটপিকারটি নিম্নলিখিতটি ব্যবহার করে: যদি (উইন্ডো.নাইভিগেটর.এমএস ম্যাক্স টাচপয়েন্টস || ডকুমেন্টে 'ontouchstart') {this.input.blur (); }
জেটি টেইলর

1
@ জেটি টেলর দেখে মনে হচ্ছে মাইক্রোসফ্ট সুপারিশ করছে navigator.maxTouchPoints ( msউপসর্গ নেই)। চেক করার জন্য একটি এমডিএন নিবন্ধও রয়েছে
টাইগার

19

যেমনটি অনেকে বলেছে, ব্যবহারকারী এজেন্টের ডেটা মুভিং টার্গেটের উপর নির্ভর করা সমস্যাযুক্ত। পর্দার আকারে গণনা করার জন্য একই কথা বলা যেতে পারে।

ইন্টারফেসটি স্পর্শ করে কিনা তা নির্ধারণ করার জন্য আমার পদ্ধতির কোনও সিএসএস কৌশল থেকে ধার করা হয়েছে :

কেবল জাভাস্ক্রিপ্ট ব্যবহার করুন (সমস্ত আধুনিক ব্রাউজার দ্বারা সমর্থন করা), একটি মিডিয়া ক্যোয়ারী ম্যাচটি সহজেই ডিভাইসটি মোবাইল কিনা তা নির্ধারণ করতে পারে ।

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

6
টাচ সক্ষম সক্ষম প্রদর্শনগুলির সাথে ল্যাপটপগুলির কী হবে?
ম্যাক্সিম

6
আমি ম্যাচমিডিয়া ("(যে কোনও পয়েন্টার: জরিমানা")) পরীক্ষা করে দেখি myself ("কোনও টাচ স্ক্রিন রয়েছে" এর পরিবর্তে "কোনও মাউস প্লাগ ইন করা হয়নি"
Sora2455

এটির কাজটি যেখানে আমার শেষ স্ক্রিপ্টটি ব্রাউজারের জুম বৈশিষ্ট্যটি ব্যবহার করে লোকেদের দ্বারা ঠকানো হবে (উদাহরণস্বরূপ এমন একটি লোক যার সাথে আমি 13 "স্ক্রিনে 4K দিয়ে কথা বলছিলাম যা 1080p এ নেমেছিল এবং এখনও জুম ব্যবহার করতে হয়েছিল) আমার আইফোনে কাজ করেছেন (সাফারি / ফায়ারফক্স) এবং অ্যান্ড্রয়েড ডিভাইস (ওয়াটারফক্স / ক্রোম / "ব্রাউজার")। সমস্ত উচ্চ আপ-ভোট দেওয়া উত্তরগুলির তুলনায় অবশ্যই অনেক বেশি নির্ভরযোগ্য
জন

এমন একটি অ্যান্ড্রয়েডে ফায়ারফক্স ফেনেক সনাক্ত করে না যার জন্য আমি নেভিগেটর.উসারএজেন্ট.টললওয়ারকেস ()। সূচিপত্র ('ফেনেক')> -১ (সম্ভবত সেরা পরিপূরক নয় ..) দিয়ে পরিপূরক করেছি
স্টিপুল

2
সংযোজন হিসাবে আপনি হোভার সম্পত্তিটি পরীক্ষা করতে পারেন: স্মার্টফোন এবং টাচস্ক্রিনের জন্য @ মিডিয়া (হোভার: কোনওটি নয়) এবং (পয়েন্টার: মোটা)
বাটাইলি

16

ব্যবহারকারী এজেন্ট ব্যবহার করে ব্রাউজার সনাক্তকরণ সম্পর্কিত MDN এর নিবন্ধ অনুসারে , যদি সম্ভব হয় তবে এই পদ্ধতির এড়াতে এবং বৈশিষ্ট্য সনাক্তকরণের মতো অন্যান্য উপায়গুলির পরামর্শ দেওয়ার জন্য এটি উত্সাহিত করা হয়।

তবে, ডিভাইসটি মোবাইল কিনা তা সনাক্ত করার জন্য যদি কেউ অবশ্যই এজেন্ট হিসাবে ব্যবহার করতে হয় তবে তারা পরামর্শ দেয়:

সংক্ষেপে, আমরা কোনও মোবাইল ডিভাইস সনাক্ত করতে ব্যবহারকারী এজেন্টের যে কোনও জায়গায় "মোবি" স্ট্রিংটি অনুসন্ধান করার পরামর্শ দিই।

অতএব, এই ওয়ান-লাইনার যথেষ্ট হবে:

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

[হালনাগাদ]:

@ Zenw0lf মন্তব্যগুলিতে যেমন পরামর্শ দেয়, নিয়মিত এক্সপ্রেশন ব্যবহার করা আরও ভাল হবে:

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


.includesআইপি -11 দ্বারা সোপপোর্ট নয়
পাশা ওলেনিক

1
@ পাশোলেনিক একটি পলিফিল এটি ঠিক করতে পারে
ম্যাক্সিম

অ্যান্ড্রয়েড সহ নেক্সাস 7 ট্যাবলেটটির Mobileব্যবহারকারীর এজেন্ট স্ট্রিং নেই
অ্যালেক্স সোরোকোলেটোভ

@ অ্যালেক্সসোরোকোলেটোভ এমডিএন নিবন্ধের 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).
জন্যও

1
আমি মনে করি এটি পলিফিল ছাড়াই যে কোনও জায়গায় কাজ করবে: const isMobile = /Mobi/.test(window.navigator.userAgent)
zenw0lf

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সংজ্ঞায়িত হলে পরীক্ষা করুন :

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সমাধানটি পছন্দ করি তবে দস্তাবেজগুলি বলে যে এটি অবহেলা করা হয়েছে! বিকাশকারী.মোজিলা.আর.ইন-
ইউএস

3
ওরিয়েন্টেশন পদ্ধতিরটি দুর্দান্ত নয় কারণ উইন্ডোজ 8 এবং উচ্চতরটি ওরিয়েন্টেশন পরিবর্তন করতে পারে।
হিটার

উইন্ডোজ 8 এবং আরও নতুন মোবাইলগুলির জন্য সমর্থন যুক্ত করার দিকেও মনোনিবেশ করেছে তবে হাইব্রিডগুলি (ল্যাপটপগুলি যেগুলি বড় প্যাডগুলিতে রূপান্তর করতে পারে) যার কারণ মোজ এটি অবহিত হিসাবে উল্লেখ না করে এমনকি একটি সনাক্তকরণ পদ্ধতি হিসাবে ব্যর্থ।
জেফ ক্লেটন

এটি উইন from থেকে গ্রাফিকাল সফ্টওয়্যার ইনস্টল করে ওরিয়েন্টেশন পরিবর্তন করতে পারে তবে নিজেকে একটি প্রশ্ন জিজ্ঞাসা করুন, ডেস্কটপ / ল্যাপটপে কে ল্যান্ডস্কেপের পরিবর্তে পোর্ট্রেটের মতো অন্য স্ক্রিন ওরিয়েন্টেশন ব্যবহার করতে পারে এবং i আরও 1 মিনিটেরও বেশি সময় ব্যবহার করতে পারে। কেউ না !!! ডেস্কটপে ওরিয়েন্টেশন পরিবর্তন মানে আপনি নীচে থেকে উপরে পর্যন্ত আপনার স্ক্রিনে অক্ষরগুলি পড়া শুরু করবেন।
গার্লকোড

11

এখানে ম্যাচের চেয়ে কার্যকরী একটি ইউজার এজেন্ট সমাধান ...

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
পরীক্ষার পদ্ধতিটি সংবেদনশীল নয়, তবে আপনার রেজেক্স ge আপনি কেবল শেষে "i" দিয়ে সংবেদনশীল রেজেক্সের জন্য পতাকা করতে পারেন এবং করবেন/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 =
shkester

3
এছাড়াও পুরানো ব্রাউজারগুলির চারপাশে থাকা এই পদ্ধতিটি সমর্থন করে না এমন একটি পলফিল ব্যবহার না করে ইন্ডেক্সঅফ ব্যবহার না করা ভাল idea লোয়ারকেস মানগুলির তালিকার জন্য লোয়ারকেসে ব্যবহার করার প্রয়োজন নেই, আপনি সেখানে চালিত ধীর লুপের পরিবর্তে /ipadypeiphone.coetc/i.test(navigator.userAgent চালাচ্ছেন তবে তা করার প্রয়োজন নেই।
জেফ্রি গিলবার্ট

10

বৈশিষ্ট্য সনাক্তকরণ আপনি কোন ডিভাইসে রয়েছেন তা সনাক্ত করার চেষ্টা করার চেয়ে আরও ভাল এবং সর্বদা নতুন ডিভাইসগুলি বেরিয়ে আসা খুব শক্ত, মডার্নিজারের মতো একটি লাইব্রেরি আপনাকে নির্দিষ্ট বৈশিষ্ট্য উপলব্ধ কিনা তা জানতে দেয়।


18
আপনি যা জিজ্ঞাসা করেছিলেন তার চেয়ে অন্য প্রশ্নের জবাব দিয়েছেন। "আমি কীভাবে মোবাইল সনাক্ত করতে পারি?" এর পরিবর্তে আপনি উত্তর দিয়েছিলেন "আমি কীভাবে নির্দিষ্ট বৈশিষ্ট্যগুলি সনাক্ত করতে পারি?" সমস্ত ডিভাইস সনাক্তকরণ বৈশিষ্ট্য সনাক্তকরণের জন্য নয়। আমরা যদি ডিভাইসগুলি সম্পর্কে পরিসংখ্যান পেতে চাইছি? তারপরে না, "বৈশিষ্ট্য সনাক্তকরণ" "[ডিভাইস নির্ধারণের তুলনায়]" এর চেয়ে বেশি ভাল নয়।
জোনাথন অ্যালার্ড

1
এটি উত্তর নয়, তবে এটি কেবল একটি মন্তব্যের চেয়ে বেশি দাবি করে। প্রশ্নটি হল: আপনি কেন কোনও ব্রাউজার সনাক্ত করতে চান এবং কেবলমাত্র (অভাবের) স্পর্শের কারণে আপনি সম্ভবত এটি জানতে চাইবেন। প্রতিক্রিয়াশীল ওয়েব ডিজাইন সব ক্ষেত্রেই না বেশিরভাগ ক্ষেত্রেই যথেষ্ট।
দু'বারjr

8

কিভাবে ভালো কিছু সম্পর্কে?

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

শুধু screen.widthপরিবর্তে ব্যবহার করবেন না কেন ? আমার কাছে মনে হয় এটি এর চেয়ে বেশি নির্ভরযোগ্য window.matchMedia
জন স্লেজার্স

গুড পয়েন্ট জন, আমি ঠিক সেই সময়ে যা ভাবছিলাম তা মনে করতে পারছি না, এটি অসম্ভব বলে মনে হচ্ছে (এখন এটি তাকিয়ে আছে) যে প্রথম ধারাটি মিথ্যা হলে দ্বিতীয় ধারাটি সত্য হয়ে যাবে would যদিও এটি যুক্ত করার কোনও কারণ অবশ্যই ছিল।
স্টুজো

বেশিরভাগ ভদ্র প্রোগ্রামাররা কোড দেখে তারা লজ্জা বোধ করে যখন তারা এক বছর আগে নিজেদের লিখেছিল। যাঁরা কেবল প্রোগ্রামার হিসাবে পরিণত হন নি ;-)
জন স্লেজার

4
ব্রাউজারটি কোনও মোবাইল ডিভাইসে রয়েছে কিনা তা নিয়ে উইন্ডো রেজোলিউশনের কোনও সম্পর্ক নেই। উদাহরণস্বরূপ, প্রচুর ডেস্কটপ ব্রাউজারগুলি পূর্ণ-পর্দাবিহীন উইন্ডোতে চালিত হয়। যদি আপনি সেই ব্রাউজারগুলিতে হ্যান্ডহেল্ড স্ক্রিনগুলির জন্য নকশাকৃত একটি ইউআই উপস্থাপন করেন তবে তাদের ব্যবহারকারীদের হতাশার অভিজ্ঞতা হতে চলেছে।
әɹsәɹoɈ

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

@ ব্লিসফুল আমার ধারণা, মোবাইল ডিভাইসগুলি সনাক্ত করার জন্য এটি সঠিক উপায় হবে না।
নিও মরিনা

দুর্ভাগ্যক্রমে না. তবে, এটি এখনও খুব সীমিত ব্যবহারের ক্ষেত্রে একটি কার্যকর বিকল্প হতে পারে।
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 ট্যাবলেটে কেবল অ্যান্ড্রয়েড ইউএ স্ট্রিং থাকে তখন কী ঘটে? প্রথমত, মোবাইলটি সত্য হয়ে যায়, পরে ট্যাবলেটটিও সত্য হয়ে যায়, তবে ট্যাবলেট মোবাইল সংযুক্ত আরএ স্ট্রিংটি বডি ট্যাগ থেকে মুছে ফেলবে।

সিএসএস:

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

alertউন্নয়নের জন্য লাইন যুক্ত হয়েছে। Chrome কনসোল অনেক হ্যান্ডহেল্ড ডিভাইস অনুকরণ করতে পারে। সেখানে পরীক্ষা।

সম্পাদনা করুন:

কেবল এটি ব্যবহার করবেন না, পরিবর্তে বৈশিষ্ট্য সনাক্তকরণ ব্যবহার করুন। সেখানে অনেকগুলি ডিভাইস এবং ব্র্যান্ড রয়েছে যে কোনও ব্র্যান্ডকে কখনই টার্গেট করা সঠিক সমাধান হবে না।


4

আমি আপনাকে http://wurfl.io/ চেক আউট করার পরামর্শ দিচ্ছি

সংক্ষেপে, আপনি যদি একটি ক্ষুদ্র জেএস ফাইল আমদানি করেন:

<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
এবং এই আইফোন থেকে সাফারি চিনতে পারে না কিভাবে?
অ্যামিথ

আপনি কোন ব্রাউজারটি ব্যবহার করছেন তার প্রসারিত করতে পারেন (সংযুক্ত আরএ স্ট্রিংটি নিখুঁত হবে), আপনি কোন ডেটা পাচ্ছেন এবং আপনি কী প্রত্যাশা করছেন?
লুকা পাসানি

আমিও wurfl চেষ্টা করেছিলাম, আমি আইওএস 11.2 এ চলমান আইফোন 5 সি তে আছি। এটি সাফারিটিকে মোবাইল ব্রাউজার হিসাবে স্বীকৃতি দেয় না। আমি "ইস_মোবাইল" ব্যবহার করার প্রত্যাশা করছি: সত্য এবং তারপরে "ফর্ম_ফ্যাক্টর": স্মার্টফোন এবং এটি আর ফিরে আসবে না।
মাইক ওয়েলস

আমাকে সংস্থার মোবাইল ডেটা গুরুগুলিতে ফিরে যেতে হয়েছিল এবং তারা আমাকে বলে যে ওএস 11.2 5 সি তে চলমান না। সর্বনিম্ন ডিভাইসটি 5 এস। সুতরাং আপনি যা লিখেছেন তাতে কিছু ঠিক নেই। সংযোগ বিচ্ছিন্ন কোথায় হতে পারে তা যাচাই করতে সায়েন্টিয়ামোবাইলে অফলাইনে যোগাযোগ করুন। ধন্যবাদ
লুকা পাসানী

4

হেরস ওয়ান লাইনার

function isMobile() {
  return (typeof window.orientation !== "undefined") || (navigator.userAgent.indexOf('IEMobile') !== -1);
};

3

ব্যবহারের ক্ষেত্রে নির্ভর করে। সমস্ত মোবাইল ডিভাইসের একটি ব্যাটারি প্রয়োজন require আপনি যা করছেন তার পরে যদি ব্যাটারিটি ড্রেন না করে গণনা শক্তি হয় তবে ব্যাটারি স্থিতি এপিআই ব্যবহার করুন :

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 */
}

বা ট্যাবলেট ডিভাইসে আরও ভাল ব্যবহারকারীর অভিজ্ঞতার জন্য তাদের একত্রিত করুন।


দ্রষ্টব্য যে ব্যাটারি স্থিতি API ব্রাউজারগুলি থেকে সরানো হচ্ছে।
Sora2455

ব্যাটারি স্ট্যাটাস এপিআই ফায়ারফক্স থেকে সরানো হয়েছে তবে জুলাই ২০১ since সাল থেকে ডাব্লু 3 সি প্রার্থী প্রস্তাবনা রয়ে গেছে , জনপ্রিয় ব্রাউজারগুলিতে কাজ করে চলেছে এবং অভিজ্ঞতার আকার দেওয়ার ক্ষেত্রে কার্যকর
জোশ হাবদাস

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

এটি মোবাইল ডিভাইস কিনা তা সনাক্ত করার জন্য সহজ কৌশল আছে। অনটচ স্টার্ট ইভেন্টটি উপস্থিত আছে কিনা তা পরীক্ষা করে দেখুন :

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 মোবাইলটি হ'ল ... ঠিক আছে


> অ্যান্ড্রয়েডে ফায়ারফক্স মোবাইলের উইন্ডোতে "" অভিযোজন "নেই বলে মনে হচ্ছে"
মলোকোকোকো

1
দুঃখিত .. ঠিক আছে আমার জন্য এখন এটি ঠিক মত কাজ করে। "যদি (মডার্নিজারআউটচুচ) / * ... * /" এবং এগিয়ে যান ...
মলোকোলোকো

কোনও টাচস্ক্রিন ডেস্কটপ ডিভাইসে থাকা অবস্থায় আধুনিকতা.আর টাচ কীভাবে কাজ করবে তা কেবল ভাবছি।
বি

এটিকে আরও মার্জিত করার জন্য আপনাকে সমস্ত তে কোড কেবল একটিতে করা উচিত যদি অন্যথায় যদি-অন্যরকম থাকে তবে।
হিটার

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 টি অক্ষর দেয়। এটি কীভাবে "অ্যান্ড্রয়েড + + মোবাইল" সনাক্ত করে?
রেসারের

1
@ রেরেশর উত্তরে দুটি রেজিেক্সস রয়েছে (উভয় একই লাইনে) - প্রথমটি পুরো ইউএ স্ট্রিংয়ের বিপরীতে পরীক্ষা করে এবং অ্যান্ড্রয়েড, মোবাইল ইত্যাদির সন্ধান করে, যখন দ্বিতীয়টি কেবল ইউএ এর প্রথম ৪ টি অক্ষরের বিপরীতে পরীক্ষা করে ।
জ্যাকডাব্লু

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

এছাড়াও আপনি একটি নির্দিষ্ট মোবাইল সনাক্ত করতে এই টিউটোরিয়ালটি অনুসরণ করতে পারেন। এখানে ক্লিক করুন


দয়া Mobileকরে আপনার আরএক্স
অরিয়াদাম

1

"উইন্ডোজ.স্ক্রিন.উইথথ" ব্যবহার সম্পর্কে কী?

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

অথবা

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

আমার মনে হয় এটি সর্বোত্তম উপায় কারণ এখানে প্রতিদিন একটি নতুন মোবাইল ডিভাইস রয়েছে!

(যদিও আমি মনে করি এটি পুরানো ব্রাউজারগুলিতে সমর্থিত নয় তবে চেষ্টা করে দেখুন :))


1
ল্যান্ডস্কেপ সম্পর্কে কি?
এরিক ভুডো

1
এটি নির্দিষ্ট পরিস্থিতিতে জন্য খুব দরকারী নয়। যদি ডেস্কটপ ব্রাউজারটি এটি পুনরায় আকার দেওয়া হয় তবে এটি সম্ভবত মোবাইল ব্রাউজার হিসাবে ভুলভাবে সনাক্ত করা হয়েছে
টয়িং_ টোটিং

একটি পিসি মূলত ব্যবহারযোগ্যতার উপর মোবাইল ডিভাইস থেকে পৃথক, ভয়াবহ উত্তর !!
হিটার

1

মনে রাখবেন যে সর্বাধিক নতুন-জেনারেলের মোবাইল ডিভাইসে 600x400 এর চেয়ে বেশি রেজোলিউশন রয়েছে। অর্থাত, একটি আইফোন 6 ....

পরীক্ষার প্রমাণ: এখানে সর্বাধিক আপোভোটেড এবং সর্বাধিক সাম্প্রতিক পোস্টগুলি দৌড়েছিল, একবার likeচ্ছিক চেক সহ এমনভাবে চালানো হয়েছে:

(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');

একরকম, নীচের ফলাফলগুলি নিম্নলিখিত ব্রাউজার অ্যাপগুলিতে ফিরে এসেছিল। স্পেস: আইফোন 6 এস, আইওএস 10.3.1।

সাফারি (সর্বশেষ): এটি মোবাইল হিসাবে সনাক্ত করেছে।

ক্রোম (সর্বশেষ): এটি মোবাইল হিসাবে সনাক্ত করে নি।

সুতরাং, আমি ল্যান্টির ( https://stackoverflow.com/a/31864119/7183483 ) পরামর্শটি পরীক্ষা করেছি এবং এটি সঠিক ফলাফলগুলি (সমস্ত আইওএস ডিভাইসের জন্য মোবাইল এবং আমার ম্যাকের জন্য ডেস্কটপ) ফিরিয়ে দিয়েছে। অতএব, আমি এটি সম্পাদনা করতে এগিয়ে চলি যেহেতু এটি দু'বার (মোবাইল এবং ট্যাবলেট উভয়ের জন্য) ফায়ার হবে। আমি তখন একটি আইপ্যাডে পরীক্ষার সময় লক্ষ্য করেছি যে এটি একটি মোবাইল হিসাবে ফিরে এসেছে, যা বোঝায় যে পরামিতিগুলি ল্যান্টিরওএসের চেয়ে বেশি কিছু পরীক্ষা করে ব্যবহার করে। অতএব, আমি কেবলমাত্র মোবাইল চেকের ভিতরে ট্যাবলেটটি সরিয়ে নিয়েছি, যা মোবাইল ফিরে আসবে তা হ'ল ট্যাবলেট চেকটি নেতিবাচক ছিল, এবং অন্যথায় ট্যাবলেট। আমি তখন মোবাইল চেকের জন্য ডেস্কটপ / ল্যাপটপ হিসাবে ফিরে আসার জন্য অন্য ধারাটি যুক্ত করেছি, যেহেতু উভয়ই যোগ্যতা অর্জন করে, তবে লক্ষ্য করেছি যে ব্রাউজারটি সিপিইউ এবং ওএস ব্র্যান্ড সনাক্ত করে। সুতরাং আমি যুক্ত কি অন্য অংশ হিসাবে সেখানে ফিরে আসে পরিবর্তে বিবৃতি। এটি ক্যাপ করার জন্য, আমি যদি কিছু সনাক্ত না হয় তবে একটি সাবধানী অন্য বিবৃতি যুক্ত করেছি। বেলো দেখুন, শীঘ্রই একটি উইন্ডোজ 10 পিসিতে একটি পরীক্ষা দিয়ে আপডেট হবে।

ওহ, এবং আমি সহজেই ডিবাগ এবং সাধারণ সংকলনের মধ্যে স্যুইচ করতে একটি 'ডিবাগমোড' পরিবর্তনশীল যুক্ত করেছি added

দাবি অস্বীকার: লন্টির সম্পূর্ণ credit , উইন্ডোজ ট্যাবলেটগুলিতেও এটি পরীক্ষা করা হয়নি ... যেটি ওএস খাঁটি উইন্ডোজ হওয়ায় ডেস্কটপ / ল্যাপটপ ফিরে আসতে পারে। একবার আমি এমন একজন বন্ধু খুঁজে পেয়েছি যা একজন ব্যবহার করে check

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

এটি আমি স্বীকৃত উত্তরের একটি এসি 6 পোর্ট যা আমি আমার প্রকল্পে ব্যবহার করছি। নোট করুন যে এটিতে ট্যাবলেটগুলিও রয়েছে।

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

Regex ব্যবহার করে ( সনাক্তকারী মোবাইল ব্রাউজার্স ডটকম থেকে ):

/* 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');
  }

আপনি যদি উভয় পদ্ধতি ব্যবহার করেন তবে বিভিন্ন ডিভাইস সনাক্ত করার জন্য আপনি একটি সঠিক উপায় পাবেন।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.