/*** sniff the UA of the client and show hidden div's for that device ***/var customizeForDevice = function(){var ua = navigator.userAgent;var checker = {iphone: ua.match(/(iPhone|iPod|iPad)/),blackberry: ua.match(/BlackBerry/),android: ua.match(/Android/)};if (checker.android){$('.android-only').show();}else if (checker.iphone){$('.idevice-only').show();}else if (checker.blackberry){$('.berry-only').show();}else {$('.unknown-device').show();}}
if(screen.width < 500 ||navigator.userAgent.match(/Android/i) ||navigator.userAgent.match(/webOS/i) ||navigator.userAgent.match(/iPhone/i) ||navigator.userAgent.match(/iPod/i)) {alert("This is a mobile device");}
$(function(){if(window.Touch) {touch_detect.auto_detected();} else {document.ontouchstart = touch_detect.surface;}}); // End loaded jQueryvar touch_detect = {auto_detected: function(event){/* add everything you want to do onLoad here (eg. activating hover controls) */alert('this was auto detected');activateTouchArea();},surface: function(event){/* add everything you want to do ontouchstart here (eg. drag & drop) - you can fire this in both places */alert('this was detected by touching');activateTouchArea();}}; // touch_detectfunction activateTouchArea(){/* make sure our screen doesn't scroll when we move the "touchable area" */var element = document.getElementById('element_id');element.addEventListener("touchstart", touchStart, false);}function touchStart(event) {/* modularize preventing the default behavior so we can use it again */event.preventDefault();}
/* Smartphones ----------- */@media only screen and (max-width: 760px) {#some-element { display: none; }}
在jQuery/JavaScript文件中:
$( document ).ready(function() {var is_mobile = false;
if( $('#some-element').css('display')=='none') {is_mobile = true;}
// now I can use is_mobile to run javascript conditionally
if (is_mobile == true) {//Conditional script here}});
if (/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent) ||(/Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.platform))) {// some code...}
// Used to detect whether the users browser is an mobile browserfunction 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 storagereturn false;else if (localStorage.mobile) // mobile storagereturn true;
// alternativemobile = ['iphone','ipad','android','blackberry','nokia','opera mini','windows mobile','windows phone','iemobile','tablet','mobi'];var ua=navigator.userAgent.toLowerCase();for (var i in mobile) if (ua.indexOf(mobile[i]) > -1) return true;
// nothing found.. assume desktopreturn false;}
var isMobile = false;if (/Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini|Opera Mobile|Kindle|Windows Phone|PSP|AvantGo|Atomic Web Browser|Blazer|Chrome Mobile|Dolphin|Dolfin|Doris|GO Browser|Jasmine|MicroB|Mobile Firefox|Mobile Safari|Mobile Silk|Motorola Internet Browser|NetFront|NineSky|Nokia Web Browser|Obigo|Openwave Mobile Browser|Palm Pre web browser|Polaris|PS Vita browser|Puffin|QQbrowser|SEMC Browser|Skyfire|Tear|TeaShark|UC Browser|uZard Web|wOSBrowser|Yandex.Browser mobile/i.test(navigator.userAgent) && confirm('Are you on a mobile device?')) isMobile = true;
var getBrowserWidth = function(){if(window.innerWidth < 768){// Extra Small Devicereturn "xs";} else if(window.innerWidth < 991){// Small Devicereturn "sm"} else if(window.innerWidth < 1199){// Medium Devicereturn "md"} else {// Large Devicereturn "lg"}};
现在我们已经设置了函数,我们可以调用它并存储值:
var device = getBrowserWidth();
你的问题是
如果浏览器在手持设备上,我想运行不同的脚本。
现在我们有了设备信息,剩下的就是一个if语句:
if(device === "xs"){// Enter your script for handheld devices here}
var isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry/i.test(navigator.userAgent);if(!isMobile){isMobile=/iPhone|iPad|iPod/i.test(navigator.platform);}
// this function will check the width of scroller// if scroller width is 0px it's mobile device
//function ismob() {var dv = document.getElementById('divscr');var sp=document.getElementById('res');if (dv.offsetWidth - dv.clientWidth == 10) {sp.innerHTML='Is mobile'; //return true;} else {sp.innerHTML='It is not mobile'; //return false;}//}
<!-- put hidden div on very begining of page --><div id="divscr" style="position:fixed;top:0;left:0;width:50px;height:50px;overflow:hidden;overflow-y:scroll;z-index:-1;visibility:hidden;"></div><span id="res"></span>
const isMobile = ((dc, wd) => {// get browser "User-Agent" or vendor ... see "opera" property in `window`let ua = wd.userAgent || wd.navigator.vendor || wd.opera;try {/*** Creating a touch event ... in modern browsers with touch screens or emulators (but not mobile) does not cause errors.* Otherwise, it will create a `DOMException` instance*/dc.createEvent("TouchEvent");
// check touchStart event(('ontouchstart' in wd) || ('ontouchstart' in dc.documentElement) || wd.DocumentTouch && wd.document instanceof DocumentTouch || wd.navigator.maxTouchPoints || wd.navigator.msMaxTouchPoints) ? void(0) : new Error('failed check "ontouchstart" event');
// check `mediaQueryList` ... pass as modern browserslet mQ = wd.matchMedia && matchMedia("(pointer: coarse)");// if no have, throw error to use "User-Agent" sniffing testif ( !mQ || mQ.media !== "(pointer: coarse)" || !mQ.matches ) {throw new Error('failed test `mediaQueryList`');}
// if there are no failures the possibility of the device being mobile is great (but not guaranteed)return true;} catch(ex) {// fall back to User-Agent sniffingreturn /(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(ua) || /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(ua.substr(0,4));}})(document, window);
// to show resultlet container = document.getElementById('result');
container.textContent = isMobile ? 'Yes, your device appears to be mobile' : 'No, your device does not appear to be mobile';
<p id="result"></p>
The regex used to test the user agent is a little old and was available on the website http://mobiledetect.com which is no longer in operation.
Maybe there is a better pattern but, I don't know.
As there is no way to identify with 100% accuracy neither by checking features, nor by examining the user agent string with regular expressions. The code snippet above should be seen only as: "one more example for this issue", as well as: "not recommended for use in production".
function deviceType() {const ua = navigator.userAgent;if (/(tablet|ipad|playbook|silk)|(android(?!.*mobi))/i.test(ua)) {return "tablet";}else if (/Mobile|Android|iP(hone|od)|IEMobile|BlackBerry|Kindle|Silk-Accelerated|(hpw|web)OS|Opera M(obi|ini)/.test(ua)) {return "mobile";}return "desktop";};console.log(deviceType());