位置: 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循环遍历对象取值)

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

  • 尼康d3100配什么镜头好(尼康d3100配什么镜头)(尼康d5600参数详细)

    尼康d3100配什么镜头好(尼康d3100配什么镜头)(尼康d5600参数详细)

  • 支付宝系统时间设置在哪里

    支付宝系统时间设置在哪里

  • 没有自拍也没有视频聊天但电脑摄像头的灯总是亮着这是什么原因(没有自拍也没有拍摄视频但是摄像头一直亮着)

    没有自拍也没有视频聊天但电脑摄像头的灯总是亮着这是什么原因(没有自拍也没有拍摄视频但是摄像头一直亮着)

  • 淘宝追评在哪里看(手机淘宝追评在哪里)

    淘宝追评在哪里看(手机淘宝追评在哪里)

  • 微信赞赏商家,商家能收到吗(微信赞赏商家钱是直接到账吗)

    微信赞赏商家,商家能收到吗(微信赞赏商家钱是直接到账吗)

  • 固态硬盘读取速度和写入速度(固态硬盘读取速度3500够用吗)

    固态硬盘读取速度和写入速度(固态硬盘读取速度3500够用吗)

  • 苹果停用60分钟后还能输几次(苹果停用60分钟第二天能用吗)

    苹果停用60分钟后还能输几次(苹果停用60分钟第二天能用吗)

  • 苹果台式电脑有主机吗(苹果台式电脑有独立显卡吗)

    苹果台式电脑有主机吗(苹果台式电脑有独立显卡吗)

  • qq该群不存在或已退出是怎么回事(qq该群不存在或已被删除)

    qq该群不存在或已退出是怎么回事(qq该群不存在或已被删除)

  • 华为nova6手机红外线功能怎么开启(华为nova65g红色手机价格)

    华为nova6手机红外线功能怎么开启(华为nova65g红色手机价格)

  • 支付宝刷脸付款怎么关掉(支付宝刷脸付款怎么设置付款方式)

    支付宝刷脸付款怎么关掉(支付宝刷脸付款怎么设置付款方式)

  • qq群投票可以修改吗(qq群投票可以修改内容吗)

    qq群投票可以修改吗(qq群投票可以修改内容吗)

  • 钉钉如何找回撤回文件(钉钉里撤回的信息怎么看)

    钉钉如何找回撤回文件(钉钉里撤回的信息怎么看)

  • 微信里视频号是什么意思(微信里视频号是什么意思?别人能看到吗)

    微信里视频号是什么意思(微信里视频号是什么意思?别人能看到吗)

  • 惠州德赛是苹果原装吗(惠州德赛是苹果原装电池吗)

    惠州德赛是苹果原装吗(惠州德赛是苹果原装电池吗)

  • 华为性能模式需要开吗(华为性能模式需关闭吗)

    华为性能模式需要开吗(华为性能模式需关闭吗)

  • team viewer 远程控制安全吗(teamviewer远程控制电脑能听到声音吗)

    team viewer 远程控制安全吗(teamviewer远程控制电脑能听到声音吗)

  • 小米ui未兼容什么意思(miui12不兼容)

    小米ui未兼容什么意思(miui12不兼容)

  • oppoa5充电有指示灯吗(oppoa53充电显示)

    oppoa5充电有指示灯吗(oppoa53充电显示)

  • 支付宝好友拉黑了怎么移出来(支付宝好友拉黑和删除的区别)

    支付宝好友拉黑了怎么移出来(支付宝好友拉黑和删除的区别)

  • 荣耀20s和荣耀9x对比(荣耀20S和荣耀20屏幕一样吗)

    荣耀20s和荣耀9x对比(荣耀20S和荣耀20屏幕一样吗)

  • 魅族16sPro能遥控空调吗(魅族16遥控器在哪)

    魅族16sPro能遥控空调吗(魅族16遥控器在哪)

  • iqoo带nfc功能吗(iqoo手机带nfc功能吗)

    iqoo带nfc功能吗(iqoo手机带nfc功能吗)

  • 中国得了多少枚金牌(中国得了多少枚奥运金牌)

    中国得了多少枚金牌(中国得了多少枚奥运金牌)

  • 抖音怎么发长1分钟视频(抖音怎么发长视频2分钟以上的)

    抖音怎么发长1分钟视频(抖音怎么发长视频2分钟以上的)

  • 如何将软件放到桌面(如何将软件放到开始菜单)

    如何将软件放到桌面(如何将软件放到开始菜单)

  • 手机音量孔进水怎么办(手机音量孔进水了怎么办)

    手机音量孔进水怎么办(手机音量孔进水了怎么办)

  • 【数据结构·考研】链表的头插法和尾插法(数据结构考试内容)

    【数据结构·考研】链表的头插法和尾插法(数据结构考试内容)

  • 增值税滞纳金怎么做账
  • 个体户开增值税怎么开
  • 企业弥补以前年度亏损顺序
  • 小额支出没有发票怎么做账
  • 企业所得税成本调减怎么填
  • 7月薪资8月发怎么交税
  • 结算金额和付款金额
  • 实际成本法和计划成本法的会计分录
  • 减半征收附加税退回的分录
  • 援企稳岗补贴的申请理由
  • 以前年度损益调整
  • 销售自己使用过的物品
  • 净资产的核算方法
  • 当月计提的增值税是什么
  • 公司社保公积金最晚缴费时间段
  • 开具红字发票无蓝字发票如何网上申报?
  • 如何理解应税行为的概念
  • 电器以旧换新的套路
  • 进项税转出余额方向在哪一方
  • 长租押金多少合适
  • 基金预算收入核算的内容包括
  • windows10如何卸载edge
  • 此 google 帐号尚未与设备关联
  • 主营业务成本和库存商品区别
  • 生产税有哪些
  • 退货应该怎么记账
  • 城建税会计分录怎么写
  • 向境外股东分配利润代扣代缴企业所得税
  • 最高像素的镜头是多少
  • 资产负债表的编制方法和步骤
  • 股权变更怎么缴纳个人所得税
  • 远眺格斯韦因斯泰因村和格斯韦因斯泰因城堡 (© Juergen Sack/Getty Images)
  • php实现数组排序,所有奇数在前偶数在后怎么排序
  • 投资性房地产公允价值大于账面价值计入
  • 市职工报销比例多少
  • 公司设备搬家费会计分录
  • 安卓京东抢购
  • roi opencv
  • phpcms教程
  • 个体工商户必须报税吗
  • 公司注册资金表格模板
  • 以摊余成本计量的金融资产会计处理
  • 商品流通企业的种类
  • 什么叫日常业务
  • 未开票收入如何计提增值税
  • 收到银行手续费发票怎么入账
  • 单位内部食堂怎么举报
  • 持有待售流动资产减值
  • 贷内部往来
  • 虚拟模块
  • 企业装卸费抵扣怎么做账
  • 预收账款怎么做账
  • sqlserver 查看表
  • MySQL timestamp的类型与时区实例详解
  • vmware虚拟化解决方案
  • 一键ghost的功能
  • win版本微信
  • 如何查看win7激活码能重复使用
  • windows8.1rt
  • linux批量处理文件
  • wind微博
  • win10 mobile 1709
  • 在linux操作系统中
  • win7安装内存4g
  • cocos2d-x教程
  • cocos2dx 2.2.2
  • opengl光线跟踪代码
  • Node.js中的construct构造函数
  • css选择器 菜鸟教程
  • 命令如下
  • python第三方库的安装方法有哪些
  • unity引擎占用内存多少
  • Android StateMachine解析( 1 )
  • 税务局约谈记录
  • 加油站怎么收税
  • 给个人佣金怎么避税
  • 车辆购置税已缴款未入库可以上牌吗
  • 异地可以打印银行清单吗?
  • 审计报告的数据真实性
  • 江苏省税务局授权网址
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

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

    友情链接: 武汉网站建设