js判断移动端浏览器类型,微信浏览器、支付宝小程序、微信小程序等

起因

现在市场上各种跨平台开发方案百家争鸣各有千秋,个人认为最成熟的还是hybird方案,简单的说就是写H5各种嵌入,当然作为前端工程师最希望的也就是公司采用hybird方案当作技术路线。

所谓的hybird方案很多时候单独指h5嵌入app页面,本专辑讲的却比这个要广泛很多,作者想写一个基础框架嵌入所有移动端app,包括app壳子、微信公众号、微信小程序、支付宝页面、支付宝小程序等,而且是一套代码可以同时嵌入各种app,这样最大程度上节约开发成本,当然我们的框架也会注意到开发质量,如前面文章提到的移动端页面切换动画也是为了提升用户体验。

大hybird方案必须要处理的是判断当前程序运行在什么环境中,故有此篇判断浏览器类型的合集。

微信浏览器

微信公众号或微信内直接打开链接

var ua = navigator.userAgent.toLowerCase();
if (ua.match(/MicroMessenger/i) == "micromessenger") {
  // 在微信中打开
}

微信小程序

// html 引入
<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.3.2.js"></script>
// js中如下判断
var ua = navigator.userAgent.toLowerCase();
if(ua.match(/MicroMessenger/i)=="micromessenger") {
  wx.miniProgram.getEnv((res)=>{
    if (res.miniprogram) {
      // 在微信小程序中打开
    }
  })
}

支付浏览器

支付宝浏览器中

var ua = navigator.userAgent.toLowerCase();
if (ua.match(/Alipay/i)=="alipay") {
  // 在支付宝中打开
}

支付宝小程序中

// html 引入
<script type="text/javascript" src="https://appx/web-view.min.js"></script>
// js中如下判断
var ua = navigator.userAgent.toLowerCase();
if (ua.match(/Alipay/i)=="alipay") {
  my.getEnv((res)=>{
    if (res.miniprogram) {
      // 在支付宝小程序中打开
    }
  })
}

app壳子

在app壳子中往往使用往ua里面添加唯一标识符来做标识。

var ua = navigator.userAgent.toLowerCase();
if (ua.match(/myapp/i)=="myapp") {
  // 在自家app壳子里面
}

其他的没有标识的app,最后的倔强

可以使用路径上新增参数的方式去识别,当识别到参数就在session保存起来,这样作用周期就是某一次打开,防止了数据污染。

完整版js

我习惯命名browser-env.js

// 自家app壳子的ua标识
const SELF_APP_UA_KEY = 'myapp'

const browserEnv = {
  enum: {
    BROWSER: 0,         // 浏览器访问,

    SELFAPP: 10,        // 自己家app

    WX: 20,             // 微信浏览器
    WX_MINIPROGRAM: 21, // 微信小程序

    ALI: 30,            // 支付宝浏览器
    ALI_MINIPROGRAM: 31,// 支付宝小程序

    // ... 更多扩展
  },
  webType: 0,
  initWebType: function (type) {
    // 设置值,并且让其不可改变,防止开发随意篡改。
    Object.defineProperty( this, "webType", {
      value: type,
      writable: false,
      configurable: false
    });
  },
  // 识别浏览器类型
  identifyBrowser() {
    // ua和枚举的浅层映射放这里,ua能匹配的都这么处理
    let codeKey = {
      'micromessenger': this.enum.WX,
      'alipay': this.enum.ALI
    }
    // 添加自家app映射
    codeKey[SELF_APP_UA_KEY] = this.enum.SELFAPP;

    // 获取ua
    let ua = navigator.userAgent.toLowerCase();
    let type = this.enum.BROWSER
    for (let key in codeKey) {
      let mk = `/${key}/i`;
      let reg = eval(mk)
      if (ua.match(reg) == key) {
        type = codeKey[key]
        break ;
      }
    }

    // ua 匹配不出来的,继续匹配  // 延迟引入JSSDK往后处理,不讲究可以直接写入html
    if (type == this.enum.WX) {
      wx.miniProgram.getEnv((res)=>{
        if (res.miniprogram) {
          type = this.enum.WX_MINIPROGRAM
        }
      })
    } else if (type ==  this.enum.ALI) {
      my.getEnv((res)=>{
        if (res.miniprogram) {
          type = this.enum.ALI_MINIPROGRAM
        }
      })
    }

    this.initWebType(type)
  },
  install(Vue) {
    this.identifyBrowser()

    Vue.config.globalProperties.$browserEnv = browserEnv;
  },
}

export default browserEnv;

老规矩,全局引入

import browserEnv from '@/utils/browser-env.js'
app.use(browserEnv)

使用,个人觉得使用枚举更加清晰吧,一顿写数字其实也挺好

if (this.$browserEnv.webType == this.$browserEnv.enum.WX) {
  // 在微信中
}

原创不易,转载请注明出处,欢迎留言提议。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 201,312评论 5 473
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 84,578评论 2 377
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 148,337评论 0 333
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,134评论 1 272
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,161评论 5 363
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,303评论 1 280
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,761评论 3 393
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,421评论 0 256
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,609评论 1 295
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,450评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,504评论 1 329
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,194评论 3 318
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,760评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,836评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,066评论 1 257
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,612评论 2 348
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,178评论 2 341

推荐阅读更多精彩内容