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的新特性介绍
Oct 31 HTML / CSS
css3 background属性调整增强介绍
Dec 18 HTML / CSS
一款纯css3实现的非常实用的鼠标悬停特效演示
Nov 05 HTML / CSS
纯css3实现的鼠标悬停动画按钮
Dec 23 HTML / CSS
CSS中的字体大小设置属性总结
May 24 HTML / CSS
css3 pointer-events 介绍详解
Sep 18 HTML / CSS
用纯CSS3实现网页中常见的小箭头
Oct 16 HTML / CSS
CSS3实现菜单悬停效果
Nov 17 HTML / CSS
Canvas与图片压缩的示例代码
Nov 28 HTML / CSS
如何让pre和textarea等HTML元素去掉滚动条自动换行自适应文本内容高度
Aug 01 HTML / CSS
css 中多种边框的实现小窍门
Apr 07 HTML / CSS
面试必问:圣杯布局和双飞翼布局的区别
May 13 HTML / CSS
使用canvas仿Echarts实现金字塔图的实例代码
CSS中妙用 drop-shadow 实现线条光影效果
仅仅使用 HTML/CSS 实现各类进度条的方式汇总
纯 CSS 自定义多行省略的问题(从原理到实现)
CSS作用域(样式分割)的使用汇总
使用CSS实现小三角边框原理解析
CSS实现切角+边框+投影+内容背景色渐变效果
You might like
PHP函数分享之curl方式取得数据、模拟登陆、POST数据
2014/06/04 PHP
YII模块实现绑定二级域名的方法
2014/07/09 PHP
phpStudy配置多站点多域名和多端口的方法
2017/09/01 PHP
PHP实现git部署的方法教程
2017/12/19 PHP
PHP观察者模式示例【Laravel框架中有用到】
2018/06/15 PHP
WordPress免插件实现面包屑导航的示例代码
2020/08/20 PHP
在js中使用"with"语句中跨frame的变量引用问题
2007/03/08 Javascript
JavaScript 计算当天是本年本月的第几周
2009/03/22 Javascript
jQuery ajax在GBK编码下表单提交终极解决方案(非二次编码方法)
2010/10/20 Javascript
contains和compareDocumentPosition 方法来确定是否HTML节点间的关系
2011/09/13 Javascript
jQuery实用基础超详细介绍
2013/04/11 Javascript
jquery animate实现鼠标放上去显示离开隐藏效果
2013/07/21 Javascript
js下拉菜单语言选项简单实现
2013/09/23 Javascript
瀑布流布局代码一例
2014/04/11 Javascript
node.js中的buffer.slice方法使用说明
2014/12/10 Javascript
js常用系统函数用法实例分析
2015/01/12 Javascript
浅谈JavaScript中的String对象常用方法
2015/02/25 Javascript
JS中字符串trim()使用示例
2015/05/26 Javascript
javascript实现网页屏蔽Backspace事件,输入框不屏蔽
2015/07/21 Javascript
javascript中 try catch用法
2015/08/16 Javascript
jquery.validate 自定义验证方法及validate相关参数
2016/01/18 Javascript
vue-cli项目修改文件热重载失效的解决方法
2018/09/19 Javascript
python3.3教程之模拟百度登陆代码分享
2014/01/16 Python
python实现simhash算法实例
2014/04/25 Python
Python内置函数之filter map reduce介绍
2014/11/30 Python
Python实现批量下载图片的方法
2015/07/08 Python
python爬虫之百度API调用方法
2017/06/11 Python
Python自定义函数实现求两个数最大公约数、最小公倍数示例
2018/05/21 Python
Django模板导入母版继承和自定义返回Html片段过程解析
2019/09/18 Python
From CSV to SQLite3 by python 导入csv到sqlite实例
2020/02/14 Python
供货协议书
2014/04/22 职场文书
亚布力滑雪场导游词
2015/02/09 职场文书
事业单位年度考核个人总结
2015/02/12 职场文书
家长会主持词开场白
2015/05/29 职场文书
入党宣誓仪式主持词
2015/06/29 职场文书
会议简讯范文
2015/07/20 职场文书