Html5同时支持多端sdk的小技巧


Posted in HTML / CSS onNovember 17, 2021

需求

在实际项目中,我们通常会需要做一些跨多平台的页面。比如说一个活动页面,需要在微信小程序里展示,也需要在自家公司的app里面展示,还需要在支付宝等平台里面展示。这时候一个h5就是很符合你的需要了。如果这个时候需求再复杂一些,比如说在这个活动页面需要调些扫码功能,或者需要调起支付功能,等原生方法调用的需求,那么这个时候你需要一个中间件,来处理不同端的原生方法。

中间件实现原理

原理很简单,我们在抽象出来一个类,在这类里面,我们将需要用到原生的方法进行实现,其他终端对这个类进行继承并重写所有的方法。

Html5同时支持多端sdk的小技巧

偷懒的话,可以不要pc调试类,直接在父类实现pc调试类里的所有方法。
实现完了,接下来就是调用了,如果在每个页面都判断终端是哪端就太麻烦了,并且也没有必要把每端的中间件代码都加载进来(可以使用require进行异步加载)。在页面加载的过程中,根据判断创建对应终端的中间件对象addon,并将这个中间件对象挂载到window上面,在使用时候就可以直接使用window.addon.scan()

注意点

微信、支付宝都有其对应的判断方法,但自家app的判断, 需要原生开发在userAgent里面添加标识(这个不复杂,原生都知道怎么加,不知道的请问度娘)
另外ios webview不再支持同步方法,建议所有的方法采用异步调用方式, 参考示例。

上代码

下面上一段我的判断各端的代码

class Addon {
  constructor () {
    let ua = window.navigator.userAgent.toLowerCase()
    if (/MPBank/.test(window.navigator.userAgent)) {
      // 招商行小程序
      
    } else if (ua.match(/MicroMessenger/i) == 'micromessenger') {
      // 大部分手机可采用此判断,是否是小程序,但有小部分华为等手机因为加载慢,这里会出现误判
      if (window.__wxjs_environment === 'miniprogram' || ua.match(/miniprogram/i) == 'miniprogram') {
        
      } else {
        
      }
    } else if (/AlipayClient/.test(window.navigator.userAgent)) {
      // 此处用ua和miniprogram判断,先查看兼容性,使用my.getEnv为异步,不适合此处
      if (ua.match(/miniprogram/i) == 'miniprogram' || ua.match(/webview/i) == 'webview') {
        // 支付宝小程序
        
      } else {
        // 支付宝
        
      }
    } else if (/xxxx-app/.test(window.navigator.userAgent)) {
      // app
      
    } else {
      // 其他处理(web和第三方渠道进入) 兜底
      
    }
}

export let addon = new Addon()

下面是一个简单的方法示例
ParentAddon.js

export default class ParentAddon {
     scan (data) {
         data.success('xxx')
     }
}

IosAppAddon.js

export default class IosAppAddon extends ParentAddon {
    scan (data) {
        window.scanCallback = data.success
        window.webkit.messageHandlers.scan.postMessage({
          callBack: 'scanCallback'
        })
     }
}

到此这篇关于Html5同时支持多端sdk的小技巧的文章就介绍到这了,更多相关Html5多端sdk内容请搜索三水点靠木以前的文章或继续浏览下面的相关文章,希望大家以后多多支持三水点靠木!

 
HTML / CSS 相关文章推荐
CSS3 :nth-child()伪类选择器实现奇偶行显示不同样式
Nov 05 HTML / CSS
一款纯css3实现的圆形旋转分享按钮旋转角度可自己调整
Sep 02 HTML / CSS
用CSS3实现无限循环的无缝滚动的实例代码
Jul 04 HTML / CSS
浅谈CSS3鼠标移入图片动态提示效果(transform)
Nov 06 HTML / CSS
HTML5 Canvas绘制文本及图片的基础教程
Mar 14 HTML / CSS
HTML5中的Scoped属性使用实例
Apr 23 HTML / CSS
html5 视频播放解决方案
Nov 06 HTML / CSS
Html5原生拖拽相关事件简介以及基础实现
Nov 19 HTML / CSS
Canvas在超级玛丽游戏中的应用详解
Feb 06 HTML / CSS
HTML5页面音频自动播放的实现方式
Jun 21 HTML / CSS
CSS三大特性继承性、层叠性和优先级详解
Jan 18 HTML / CSS
css3带你实现3D转换效果
Feb 24 HTML / CSS
使用canvas仿Echarts实现金字塔图的实例代码
CSS中妙用 drop-shadow 实现线条光影效果
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
纯 CSS 自定义多行省略的问题(从原理到实现)
CSS作用域(样式分割)的使用汇总
使用CSS实现小三角边框原理解析
CSS实现切角+边框+投影+内容背景色渐变效果
You might like
php cookie 作用范围?不要在当前页面使用你的cookie
2009/03/24 PHP
php异常处理使用示例
2014/02/25 PHP
jquery特效 点击展示与隐藏全文
2015/12/09 Javascript
谈谈我对JavaScript DOM事件的理解
2015/12/18 Javascript
jQuery实现本地预览上传图片功能
2016/01/08 Javascript
javascript实现全角转半角的方法
2016/01/23 Javascript
jquery.qtip提示信息插件用法简单实例
2016/06/17 Javascript
微信小程序开发之实现选项卡(窗口顶部TabBar)页面切换
2016/11/25 Javascript
vue-router跳转页面的方法
2017/02/09 Javascript
详解angular2采用自定义指令(Directive)方式加载jquery插件
2017/02/09 Javascript
jQuery插件HighCharts绘制2D柱状图、折线图和饼图的组合图效果示例【附demo源码下载】
2017/03/09 Javascript
Angular实现下载安装包的功能代码分享
2017/09/05 Javascript
AngularJS监听ng-repeat渲染完成的两种方法
2018/01/16 Javascript
vue2.0项目实现路由跳转的方法详解
2018/06/21 Javascript
js中自定义react数据验证组件实例详解
2018/10/19 Javascript
react-native滑动吸顶效果的实现过程
2019/06/03 Javascript
[38:38]完美世界DOTA2联赛PWL S3 access vs Rebirth 第二场 12.17
2020/12/18 DOTA
[01:05:52]DOTA2-DPC中国联赛 正赛 Ehome vs Aster BO3 第一场 2月2日
2021/03/11 DOTA
Python开发WebService系列教程之REST,web.py,eurasia,Django
2014/06/30 Python
Django REST框架创建一个简单的Api实例讲解
2019/11/05 Python
Python要如何实现列表排序的几种方法
2020/02/21 Python
Django 解决阿里云部署同步数据库报错的问题
2020/05/14 Python
Python 代码调试技巧示例代码
2020/08/11 Python
用python制作个音乐下载器
2021/01/30 Python
详解CSS3中nth-child与nth-of-type的区别
2017/01/05 HTML / CSS
检测浏览器是否支持html5视频的代码
2013/03/28 HTML / CSS
中国领先的专业演出票务网:永乐票务
2016/08/29 全球购物
C/C++程序员常见面试题二
2015/11/19 面试题
上班上网检讨书
2014/01/29 职场文书
联谊会主持词
2014/03/26 职场文书
小学先进集体事迹材料
2014/05/31 职场文书
教师党员批评与自我批评
2014/10/15 职场文书
党的群众路线教育实践活动组织生活会发言材料
2014/10/17 职场文书
个人存款证明书
2014/10/18 职场文书
先进个人材料怎么写
2014/12/30 职场文书
2015年全国爱眼日活动方案
2015/05/05 职场文书