位置: IT常识 - 正文

如何在uniapp中优雅地使用WebView(uniapp如何使用)

编辑:rootadmin
如何在uniapp中优雅地使用WebView 这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助从webview页面传值到uniapp中官方文档已经很详细了,这里给大家上我的实战代码,首先在webview页面中引入相关依赖:<!-- uniapp各平台依赖 --><script type="text/javascript"> var userAgent = navigator.userAgent; if (userAgent.indexOf('AlipayClient') > -1) { // 支付宝小程序的 JS-SDK 防止 404 需要动态加载,如果不需要兼容支付宝小程序,则无需引用此 JS 文件。 document.writeln('<script src="https://appx/web-view.min.js"' + '>' + '<' + '/' + 'script>'); } else if (/QQ/i.test(userAgent) && /miniProgram/i.test(userAgent)) { // QQ 小程序 document.write('<script type="text/javascript" src="https://qqq.gtimg.cn/miniprogram/webview_jssdk/qqjssdk-1.0.0.js"><\/script>'); } else if (/miniProgram/i.test(userAgent)) { // 微信小程序 JS-SDK 如果不需要兼容微信小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://res.wx.qq.com/open/js/jweixin-1.4.0.js"><\/script>'); } else if (/toutiaomicroapp/i.test(userAgent)) { // 字节跳动小程序 JS-SDK 如果不需要兼容字节跳动小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://s3.pstatp.com/toutiao/tmajssdk/jssdk-1.0.1.js"><\/script>'); } else if (/swan/i.test(userAgent)) { // 百度小程序 JS-SDK 如果不需要兼容百度小程序,则无需引用此 JS 文件。 document.write('<script type="text/javascript" src="https://b.bdstatic.com/searchbox/icms/searchbox/js/swan-2.0.18.js"><\/script>'); }</script><!-- uni 的 SDK --><script type="text/javascript" src="https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js"></script>然后通过uni.postMessage向uniapp传值: document.addEventListener('UniAppJSBridgeReady', function() { uni.postMessage({ data: { action: 'message' } }); uni.getEnv(function(res) { console.log('当前环境:' + JSON.stringify(res)); }); });在uniapp中监听message:<template lang="pug"> view web-view.webview(:src="url" @message="getMessage")</template><script> export default { data() { return { url: "https://zys201811.boringkiller.cn/shianonline/webview/vod.html?data=123", } }, methods: { getMessage(event) { let data = event.detail.data console.log(data); } } }</script><style lang="stylus" scoped>$webviewHeight = 420rpx.webview width 750rpx height $webviewHeight</style>从uniapp中动态传值到webview页面按照官方文档,从uniapp传值到webview中,只能通过query:<template lang="pug"> view <!-- #ifdef APP-PLUS --> web-view.webview(:src="url") <!-- #endif --></template><script> export default { data() { return { url: "https://zys201811.boringkiller.cn/shianonline/webview/vod.html?data=123", } } }</script><style lang="stylus" scoped>$webviewHeight = 420rpx.webview width 750rpx height $webviewHeight</style>在webview中解析query:let data = getQuery('data')console.log(data); // 获取 uni-app 传来的值// 取url中的参数值function getQuery(name) { // 正则:[找寻'&' + 'url参数名字' = '值' + '&']('&'可以不存在) let reg = new RegExp("(^|&)"+ name +"=([^&]*)(&|$)"); let r = window.location.search.substr(1).match(reg); console.log(r); if(r != null) { // 对参数值进行解码 return decodeURIComponent(r[2]); } return null;}但是,我发现,通过向web-view的src中传值,只能传一次,如果参数改变了,没法动态传到webview。对于这种需要动态传递参数的需求,我们可以使用动态创建webview达到目的,而不是通过webview组件。实现如下:<template lang="pug"> view</template><script> export default { data() { return { url: "https://zys201811.boringkiller.cn/shianonline/webview/vod.html", } }, mounted() { // #ifdef APP-PLUS var w = plus.webview.create(this.url + '?data=good'); w.show(); setTimeout(() => { plus.webview.close(w); setTimeout(() => { w = plus.webview.create(this.url + '?data=123'); w.show(); }, 1000) }, 1000) // #endif } }</script>以上,通过plus.webview.create创建一个webview,然后显示。如果数据更新了,可以先关闭之前的一个webview,然后重新创建一个,再显示。也可以直接使用open刷新页面:// #ifdef APP-PLUSvar w = plus.webview.open(this.url + '?data=good');setTimeout(() => { w = plus.webview.open(this.url + '?data=123');}, 1000)// #endif相关API:// 创建窗口WebviewObject plus.webview.create( url, id, styles, extras );// 创建并打开窗口WebviewObject plus.webview.open( url, id, styles, aniShow, duration, showedCB );// 显示窗口void plus.webview.show( id_wvobj, aniShow, duration, showedCB, extras );// 隐藏窗口void plus.webview.hide( id_wvobj, aniHide, duration, extras );// 关闭窗口void plus.webview.close( id_wvobj, aniClose, duration, extras );调用webview中的方法动态传值还有一种解决方案,就是通过evalJs方法直接调用webview中方法。具体实现如下:在模板中,通过ref暴露web-view元素:<template lang="pug"> web-view(:src="url" ref="wb")</template>在mounted生命周期的时候获取此元素:// #ifdef APP-PLUSthis.wb = this.$refs.wb// #endif在需要调用webview中方法的时候使用evalJs:// #ifdef APP-PLUSthis.wb.evalJs(`showAlert(${this.num})`)// #endif在webview页面定义对应的方法即可:function showAlert(num) { alert(num)}从uniapp动态传值,可以使用这种方式。注意:在nvue中,只有通过ref暴露webview节点才能拿到webview本身注意evalJs的拼写方式,官方文档是evalJS,但通过ref获取时,S应该为小写如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。
本文链接地址:https://www.jiuchutong.com/zhishi/287282.html 转载请保留说明!

上一篇:vue 在for循环中设置ref并获取$refs(vue for循环遍历对象取值)

下一篇:最贵的域名是什么(最贵的域名是什么名字)

  • 怎么算一般纳税人
  • 居民企业投资收益免征企业所得税
  • 进项税额比销项税额大怎么办
  • 企业净利润怎么分配
  • 固定资产一次性折旧的账务处理和税务处理
  • 小规模企业免征增值税如何做账
  • 标书的资金类型是什么
  • 个人住房契税2021年收费标准
  • 会计发票怎么样粘贴,记账凭证也要粘上吗
  • 开具正数发票中如何体现扣款
  • 免征增值税和营业税政策
  • 房地产企业借款过多的原因
  • 需不需要交企业所得税看报表的哪个地方?
  • 少数股东损益借方增加还是贷方增加
  • 盈余公积为0说明什么问题
  • 发票红冲需要用发票打印吗
  • 金蝶K3打印凭证下的过账和制单怎么新增名字
  • 付款账号姓名是什么意思
  • 特种设备培训费计入什么会计科目
  • 工商注册需要提供什么
  • 商品和安装能开什么发票
  • 企业所得税增值税完税证明
  • 企业收到外部水电费如何做账?
  • PHP:Memcached::addByKey()的用法_Memcached类
  • 电脑开机按f8出现please select
  • 稀有品种茅膏菜
  • 出口退税的期限是多长
  • 前端uniapp写表格
  • 营业店面装修费怎么入账
  • phpmyadmin无法登陆mysql数据库
  • 马萨诸塞 下架
  • vue3中使用for循环引用多个组件
  • js 数组去重的四种方法
  • php返回数组中所有的值的函数是什么?
  • 前期认证相符且不符合
  • 应付票据贴现是负债吗
  • 普通发票增量需要什么资料
  • python索引值-1和位置-1
  • mongodb 随机获取一条数据
  • python 逻辑取反
  • 国家定额发票使用范围
  • 网上变更财务负责人新负责人要确认吗
  • 以前年度多缴的税
  • 企业长期零申报
  • 费用报销票跨月可以用吗
  • 制造费用期末要结转吗
  • 公司买的茶叶怎么入账
  • 三证合一指的是什么意思
  • 工商年报认缴时间过期了怎么办
  • 支付销售商品运费
  • 发票服务内容写错怎么办
  • 航天信息服务费发票哪里打印
  • 机票的抵扣进项税的注意事项
  • 员工预支工资属于什么科目
  • 预付押金是否可以退回
  • 计提的意义
  • 季度申报表弥补以前年度亏损
  • 企业初建
  • mysql5.7.32免安装教程
  • Mysql使用insert插入多条记录 批量新增数据
  • Ubuntu 14.04/14.10如何安装记账软件HomeBank?
  • freebsd常用命令
  • 如何用u盘装系统 知乎
  • 电脑删除ie后怎么恢复
  • linux mv命令详解
  • centos怎么安装
  • 苹果发布首款MR头显
  • linux的防火墙配置文件
  • kdeskcore.exe是什么
  • win7系统搜索不到自己家wi-fi
  • 场景切换方式
  • 基于JAVAscrip的课程设计源代码
  • bash 字符串操作
  • web标准有那几个方面
  • 深入理解计算机系统 电子书
  • jquery动画效果代码
  • bootstrap的表格
  • js判断密码是否符合标准
  • 详解Javascript事件驱动编程
  • 教育附加费网上缴费
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设