js判断PC端与移动端跳转


Posted in Javascript onDecember 24, 2020

在网上看到很多这样类似的代码,但是有的很复杂,或者有的没有判断完全,上次经理去见完客户回来讲,使用苹果浏览打开pc端(pc已经做了识别跳转)会自动跳转到移动端的网页去,后来经测试才发现

document.writeln(" 是否为移动终端: "+browser.versions.mobile+"</br>");  //打印出来 true

所以在完整版的代码中 第一层if 判断一直是true

以上的原因是因为,网上流传的判断为: 

mobile: !! u.match(/AppleWebKit.*Mobile.*/) || !! u.match(/AppleWebKit/), //是否为移动终端

判断不完整才会造成这种原因。

下面三水点靠木小编为大家分享网站常用的判断代码

pc自动跳移动端

(function() {
      if (/Android|webOS|iPhone|iPad|Windows Phone|iPod|BlackBerry|SymbianOS|Nokia|Mobile|Opera Mini/i.test(navigator.userAgent)) {
        var siteName = window.location.pathname;
        if (url.indexOf("?pc") < 0) {
          try {
				if (typeof siteName !== "undefined") {
            	window.location.href = "https://m.3water.com" + siteName
          		} 
          } catch (e) {}
        }
      }
    })();

移动端自动跳pc端

;(function() {
  var reWriteUrl = function(url) {
    if (url) {
      var Splits = url.split("/"),
      siteName = window.location.pathname;
      if (typeof siteName !== "undefined") {
        return "https://3water.com" + siteName
      }
    }
  };
  if (!/Android|webOS|iPhone|iPad|Windows Phone|iPod|BlackBerry|SymbianOS|Nokia|Mobile|Opera Mini/i.test(navigator.userAgent)) {
    var url = window.location.href;
    var pathname = window.location.pathname;
    if (url.indexOf("?m") < 0) {
      try {
        window.location.href = reWriteUrl(url)
      } catch(e) {}
    }
  }
})();

正确的判断应该为:

mobile: !! u.match(/AppleWebKit.*Mobile.*/) || !! u.match(/AppleWebKit/) && u.indexOf('QIHU') && u.indexOf('QIHU') > -1 && u.indexOf('Chrome') < 0, //是否为移动终端

测试程序代码

var browser = {
 versions: function() {
 var u = navigator.userAgent;
 return {
  trident: u.indexOf('Trident') > -1,
  presto: u.indexOf('Presto') > -1,
  webKit: u.indexOf('AppleWebKit') > -1,
  gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1,
  mobile: !! u.match(/AppleWebKit.*Mobile.*/) || !! u.match(/AppleWebKit/) && u.indexOf('QIHU') && u.indexOf('QIHU') > -1 && u.indexOf('Chrome') < 0,
  ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/),
  android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1,
  iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1,
  iPad: u.indexOf('iPad') > -1,
  webApp: u.indexOf('Safari') == -1
 }
 } (),
 language:(navigator.browserLanguage || navigator.language).toLowerCase()
};
document.writeln("语言版本: "+browser.language+"</br>");
document.writeln(" 是否为移动终端: "+browser.versions.mobile+"</br>");
document.writeln(" ios终端: "+browser.versions.ios+"</br>");
document.writeln(" android终端: "+browser.versions.android+"</br>");
document.writeln(" 是否为iPhone: "+browser.versions.iPhone+"</br>");
document.writeln(" 是否iPad: "+browser.versions.iPad+"</br>");
document.writeln(navigator.userAgent+"</br>");

完整版,运用于项目代码

/*
*
* 判断PC端与WAP端
*/
var mobile_bs = {
 versions: function() {
 var u = navigator.userAgent;
 return {
  trident: u.indexOf('Trident') > -1, //IE内核
  presto: u.indexOf('Presto') > -1, //opera内核
  webKit: u.indexOf('AppleWebKit') > -1, //苹果、谷歌内核
  gecko: u.indexOf('Gecko') > -1 && u.indexOf('KHTML') == -1, //火狐内核
  mobile: !! u.match(/AppleWebKit.*Mobile.*/) || !! u.match(/AppleWebKit/) && u.indexOf('QIHU') && u.indexOf('QIHU') > -1 && u.indexOf('Chrome') < 0, //是否为移动终端
  ios: !!u.match(/\(i[^;]+;( U;)? CPU.+Mac OS X/), //ios终端
  android: u.indexOf('Android') > -1 || u.indexOf('Linux') > -1, //android终端或者uc浏览器
  iPhone: u.indexOf('iPhone') > -1 || u.indexOf('Mac') > -1, //是否为iPhone或者QQHD浏览器
  iPad: u.indexOf('iPad') > -1, //是否iPad
  webApp: u.indexOf('Safari') == -1 //是否web应该程序,没有头部与底部
 }
 } ()
};
if (mobile_bs.versions.mobile) {
 if (mobile_bs.versions.android || mobile_bs.versions.iPhone || mobile_bs.versions.iPad || mobile_bs.versions.ios) {
 window.location.href = "移动端网址";
 }
};

以上就是本文的全部内容,希望本文的内容对大家的学习或者工作能带来一定的帮助,同时也希望多多支持三水点靠木!

Javascript 相关文章推荐
jQuery :nth-child前有无空格的区别分析
Jul 11 Javascript
jQuery.holdReady()使用方法
May 20 Javascript
javascript html实现网页版日历代码
Mar 08 Javascript
基于jquery fly插件实现加入购物车抛物线动画效果
Apr 05 Javascript
angular+bootstrap的双向数据绑定实例
Mar 03 Javascript
angular directive的简单使用总结
May 24 Javascript
Angular使用Restful的增删改
Dec 28 Javascript
vue实现移动端轻量日期组件不依赖第三方库的方法
Apr 28 Javascript
vue前端框架—Mint UI详解(更适用于移动端)
Apr 30 Javascript
关于AOP在JS中的实现与应用详解
May 06 Javascript
改进 JavaScript 和 Rust 的互操作性并深入认识 wasm-bindgen 组件
Jul 13 Javascript
JavaScript对象字面量和构造函数原理与用法详解
Apr 18 Javascript
jquery编写日期选择器
Mar 16 #Javascript
jquery事件与绑定事件
Mar 16 #Javascript
Angular使用$http.jsonp发送跨站请求的方法
Mar 16 #Javascript
JSON与js对象序列化实例详解
Mar 16 #Javascript
JS对象的深度克隆方法示例
Mar 16 #Javascript
JS对象深度克隆实例分析
Mar 16 #Javascript
JS异步加载的三种实现方式
Mar 16 #Javascript
You might like
php错误、异常处理机制(补充)
2012/05/07 PHP
php获取根域名方法汇总
2014/10/28 PHP
大家在抢红包,程序员在研究红包算法
2015/08/31 PHP
PHP-FPM实现性能优化
2016/03/31 PHP
PHP中如何使用Redis接管文件存储Session详解
2018/11/28 PHP
BOM与DOM的区别分析
2010/10/26 Javascript
取消选中单选框radio的三种方式示例介绍
2013/12/23 Javascript
js实现键盘控制DIV移动的方法
2015/01/10 Javascript
PHP+mysql+Highcharts生成饼状图
2015/05/04 Javascript
js中不同的height, top的区别对比
2015/09/24 Javascript
实例讲解javascript注册事件处理函数
2016/01/09 Javascript
JavaScript Date对象详解
2016/03/01 Javascript
JS解析url查询参数的简单代码
2017/08/06 Javascript
微信小程序用户信息encryptedData详解
2018/08/24 Javascript
微信小程序wepy框架学习和使用心得详解
2019/05/24 Javascript
python计算方程式根的方法
2015/05/07 Python
讲解Python中运算符使用时的优先级
2015/05/14 Python
使用python实现链表操作
2018/01/26 Python
Python使用Shelve保存对象方法总结
2019/01/28 Python
通过实例了解Python str()和repr()的区别
2020/01/17 Python
Python操控mysql批量插入数据的实现方法
2020/10/27 Python
CSS3实现文字波浪线效果示例代码
2016/11/20 HTML / CSS
房地产销售员的自我评价分享
2013/12/04 职场文书
财务方面个人工作的自我评价
2013/12/28 职场文书
雪山饭庄的创业计划书范文
2014/01/18 职场文书
伊索寓言教学反思
2014/05/01 职场文书
安全演讲稿大全
2014/05/09 职场文书
企业活动策划方案
2014/06/02 职场文书
2014学习优秀共产党员先进事迹思想汇报
2014/09/14 职场文书
教师思想作风整顿个人剖析材料
2014/10/10 职场文书
员工表扬信怎么写
2015/05/05 职场文书
2015年测量员工作总结
2015/05/23 职场文书
2015年会计年终工作总结
2015/05/26 职场文书
婚宴致辞
2015/07/28 职场文书
python-for x in range的用法(注意要点、细节)
2021/05/10 Python
JS如何使用剪贴板操作Clipboard API
2021/05/17 Javascript