js判斷移動端瀏覽器類型,微信瀏覽器榛瓮、支付寶小程序切蟋、微信小程序等

起因

現(xiàn)在市場上各種跨平臺開發(fā)方案百家爭鳴各有千秋,個人認為最成熟的還是hybird方案榆芦,簡單的說就是寫H5各種嵌入,當然作為前端工程師最希望的也就是公司采用hybird方案當作技術(shù)路線喘鸟。

所謂的hybird方案很多時候單獨指h5嵌入app頁面匆绣,本專輯講的卻比這個要廣泛很多,作者想寫一個基礎框架嵌入所有移動端app什黑,包括app殼子崎淳、微信公眾號、微信小程序愕把、支付寶頁面拣凹、支付寶小程序等,而且是一套代碼可以同時嵌入各種app恨豁,這樣最大程度上節(jié)約開發(fā)成本嚣镜,當然我們的框架也會注意到開發(fā)質(zhì)量,如前面文章提到的移動端頁面切換動畫也是為了提升用戶體驗橘蜜。

大hybird方案必須要處理的是判斷當前程序運行在什么環(huán)境中菊匿,故有此篇判斷瀏覽器類型的合集。

微信瀏覽器

微信公眾號或微信內(nèi)直接打開鏈接

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跌捆,最后的倔強

可以使用路徑上新增參數(shù)的方式去識別,當識別到參數(shù)就在session保存起來象颖,這樣作用周期就是某一次打開佩厚,防止了數(shù)據(jù)污染。

完整版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) {
    // 設置值抄瓦,并且讓其不可改變,防止開發(fā)隨意篡改陶冷。
    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 匹配不出來的,繼續(xù)匹配  // 延遲引入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;

老規(guī)矩摸恍,全局引入

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

使用,個人覺得使用枚舉更加清晰吧,一頓寫數(shù)字其實也挺好

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

原創(chuàng)不易立镶,轉(zhuǎn)載請注明出處壁袄,歡迎留言提議。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末媚媒,一起剝皮案震驚了整個濱河市嗜逻,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌缭召,老刑警劉巖栈顷,帶你破解...
    沈念sama閱讀 218,755評論 6 507
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異嵌巷,居然都是意外死亡萄凤,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,305評論 3 395
  • 文/潘曉璐 我一進店門搪哪,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靡努,“玉大人,你說我怎么就攤上這事晓折』箅” “怎么了?”我有些...
    開封第一講書人閱讀 165,138評論 0 355
  • 文/不壞的土叔 我叫張陵漓概,是天一觀的道長漾月。 經(jīng)常有香客問我,道長胃珍,這世上最難降的妖魔是什么栅屏? 我笑而不...
    開封第一講書人閱讀 58,791評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮堂鲜,結(jié)果婚禮上栈雳,老公的妹妹穿的比我還像新娘。我一直安慰自己缔莲,他們只是感情好哥纫,可當我...
    茶點故事閱讀 67,794評論 6 392
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著痴奏,像睡著了一般蛀骇。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上读拆,一...
    開封第一講書人閱讀 51,631評論 1 305
  • 那天擅憔,我揣著相機與錄音,去河邊找鬼檐晕。 笑死暑诸,一個胖子當著我的面吹牛蚌讼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播个榕,決...
    沈念sama閱讀 40,362評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼篡石,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了西采?” 一聲冷哼從身側(cè)響起凰萨,我...
    開封第一講書人閱讀 39,264評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎械馆,沒想到半個月后胖眷,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,724評論 1 315
  • 正文 獨居荒郊野嶺守林人離奇死亡霹崎,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,900評論 3 336
  • 正文 我和宋清朗相戀三年珊搀,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片仿畸。...
    茶點故事閱讀 40,040評論 1 350
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖朗和,靈堂內(nèi)的尸體忽然破棺而出错沽,到底是詐尸還是另有隱情,我是刑警寧澤眶拉,帶...
    沈念sama閱讀 35,742評論 5 346
  • 正文 年R本政府宣布千埃,位于F島的核電站,受9級特大地震影響忆植,放射性物質(zhì)發(fā)生泄漏放可。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,364評論 3 330
  • 文/蒙蒙 一朝刊、第九天 我趴在偏房一處隱蔽的房頂上張望耀里。 院中可真熱鬧,春花似錦拾氓、人聲如沸冯挎。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,944評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽房官。三九已至,卻和暖如春续滋,著一層夾襖步出監(jiān)牢的瞬間翰守,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,060評論 1 270
  • 我被黑心中介騙來泰國打工疲酌, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留蜡峰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,247評論 3 371
  • 正文 我出身青樓,卻偏偏與公主長得像事示,于是被迫代替她去往敵國和親早像。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 44,979評論 2 355

推薦閱讀更多精彩內(nèi)容