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`;
if (ua.match(mk) == key) {
type = codeKey[key]
}
}
// 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) {
// 在微信中
}
原创不易,转载请注明出处,欢迎留言提议。
js判断移动端浏览器类型,微信浏览器、支付宝小程序、微信小程序等的更多相关文章
- 判断网页打开浏览器类型,PC 手机端,微信浏览器,,,
//判断网页打开浏览器类型,PC 手机端,微信浏览器,,, <script type="text/javascript"> var browser = { versio ...
- JS判断移动端还是PC端(改造自腾讯网) 仅用于宣传动画,下载页等
JS判断移动端还是PC端(改造自腾讯网 http://www.qq.com/) 本脚本仅用于宣传动画,下载页( ipad 也算pc端)等, ionic 用 ionic.platform 即可( io ...
- js判断移动端是否安装某款app的多种方法
本文实例讲解了js判断移动端是否安装某款app的多种方法,分享给大家供大家参考,具体内容如下 第一种方法: 一:判断是那种设备 ? || u.indexOf(; //android终端或者uc浏览器 ...
- js 判断pc端或手机端
<script> (function () { var navUA = navigator.userAgent; var defIncludeStr = "iPhone|Andr ...
- JS 判断移动端与PC端
js判断移动端与pc端 这里介绍下使用device.js插件来判断移动端设备 地址:https://github.com/matthewhudson/device.js 示例: 1 2 3 4 5 ...
- js判断安卓客户端或者是ios客户端,是否是微信浏览器
代码: function xaizai() { var u = navigator.userAgent, app = navigator.appVersion; var isAndroid = ...
- js判断浏览器类型以及浏览器版本
判断浏览器类型: if navigator.userAgent.indexOf(”MSIE”)>0) {} //判断是否IE浏览器 if(isFirefox=navigator.userAg ...
- js判断移动端和PC端跳转不同页面
方法一: /* * * 判断PC端与WAP端 */ var mobile_bs = { versions: function() { var u = navigator.userAgent; retu ...
- js判断移动端是否安装某软软件,安装直接打开相应的链接,否则跳转到下载商店方法
<!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content ...
随机推荐
- noip模拟48
A. Lighthouse 很明显的容斥题,组合式与上上场 \(t2\) 一模一样 注意判环时长度为 \(n\) 的环是合法的 B. Miner 题意实际上是要求偶拉路 对于一个有多个奇数点的联通块, ...
- Python - 导入的位置
导入的是什么 导入是将 Python 的一些功能函数放到当前的脚本中使用 不导入的功能无法直接在当前脚本使用(除了 python 自带的内置函数) Python 有很多第三方功能,假设想要使用,都必须 ...
- Linux - centos7.X 安裝 Python 3.7
说明 全部操作都在 root 用户下执行 安装编译相关工具 yum -y groupinstall "Development tools" yum -y install zlib- ...
- javascript对象——基本对象
1.array对象 2.Boolean包装类对象和Date对象 3.Math对象 1到100随机数 4.RegExp对象 4.1 正则规则 如: 4.2 两种创建正则对象方式 /正则表达式/ ...
- footer沉底效果
介绍一个简单直接的方法: flex布局 heml,body{ height: 100%; min-height: 100%; display: flex; flex-direction: column ...
- ysoserial CommonsColletions1分析
JAVA安全审计 ysoserial CommonsColletions1分析 前言: 在ysoserial工具中,并没有使用TransformedMap的来触发ChainedTransformer链 ...
- 第24篇-虚拟机对象操作指令之getfield
getfield指令表示获取指定类的实例域,并将其值压入栈顶.其格式如下: getstatic indexbyte1 indexbyte2 无符号数indexbyte1和indexbyte2构建为(i ...
- 详解C3P0(数据库连接池)
详解C3P0(数据库连接池) 快速索引 一.基本定义 二.使用C3P0(数据库连接池)的必要性 1.JDBC传统模式开发存在的主要问题 三.数据库连接池的详细说明 四.使用连接池的明显优势 1.资源的 ...
- 【转载】linux 工作队列上睡眠的认识--不要在默认共享队列上睡眠
最近项目组做xen底层,我已经被完爆无数遍了,关键在于对内核.驱动这块不熟悉,导致分析xen代码非常吃力.于是准备细细的将 几本 linux 书籍慢慢啃啃. 正好看到LINUX内核设计与实现,对于内核 ...
- obs软件mac设置
1 远程电脑软件teamview或者向日葵 远程mac电脑会时黑屏或连不上, 需要设置系统偏好->设置软件权限 2 设置obs 显示不出画面或声音,也需要在系统偏好设置obs的权限(首先打开OB ...