如何在uniapp中优雅地使用WebView

article/2025/11/4 21:15:06

这里给大家分享我在网上总结出来的一些知识,希望对大家有所帮助

从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">viewweb-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.dataconsole.log(data);}}}
</script><style lang="stylus" scoped>
$webviewHeight = 420rpx
.webviewwidth 750rpxheight $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
.webviewwidth 750rpxheight $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-PLUSvar 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-PLUS
var 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-PLUS
this.wb = this.$refs.wb
// #endif

在需要调用webview中方法的时候使用evalJs

// #ifdef APP-PLUS
this.wb.evalJs(`showAlert(${this.num})`)
// #endif

在webview页面定义对应的方法即可:

function showAlert(num) {alert(num)
}

从uniapp动态传值,可以使用这种方式。

注意:

  1. 在nvue中,只有通过ref暴露webview节点才能拿到webview本身

  2. 注意evalJs的拼写方式,官方文档是evalJS,但通过ref获取时,S应该为小写

如果对您有所帮助,欢迎您点个关注,我会定时更新技术文档,大家一起讨论学习,一起进步。

 


http://chatgpt.dhexx.cn/article/mKt5rilQ.shtml

相关文章

Android:最全面的 Webview 详解

前言 现在很多App里都内置了Web网页&#xff08;Hyprid App&#xff09;&#xff0c;比如说很多电商平台&#xff0c;淘宝、京东、聚划算等等&#xff0c;如下图 那么这种该如何实现呢&#xff1f;其实这是Android里一个叫WebView的组件实现的。今天我将全面介绍WebView的常用…

Android 各个版本WebView

转载请注明出处 http://blog.csdn.net/typename/ powered by miechal zhao &#xff1a; miechalzhaogmail.com 前言&#xff1a; 根据Google公布的Android 各个系统版本市场占有率(Google Android dashboards), Android 4.0及其以上系统将近90%左右&#xff0c;发展趋势必…

app中的webview是什么?如何理解?

app中的webview是什么&#xff1f;如何理解&#xff1f; 当你上网阅读东西时&#xff0c;我们一般会选择一款浏览器&#xff0c;比如Chrome、火狐、safari、IE或者Edge。你可能不知道这些浏览器之间有一些竞争&#xff0c;而竞争的主要形式就是WebView。 WebView的定义 什么…

什么是webview ?

Andoid 平台&#xff0c;SDK 中有一个控件叫 WebView&#xff1b; IOS/MacOS 平台&#xff0c;SDK 中有一个控件叫 WebView/UIWebView/WKWebView(UIView/NSView)&#xff1b; 这些控件&#xff0c;用于移动端 APP 嵌入(Embed) Web 技术&#xff0c;加载 Web 内容&#xff1b;…

webview是什么,给小白的简单介绍

最近在学习uni-app&#xff0c;也会一直更新关于uni-app学习中自己遇到的问题和心得。 从uni-app的介绍看起&#xff0c;碰到了 ‘webview’ 一词&#xff0c;有必要搜罗一番。 webview是什么&#xff0c;给小白的简单介绍 百度知道 Webview含义&#xff1a;WebView也就是我…

VS下 dllimport与dllexport作用与区别

原文&#xff1a;http://www.cnblogs.com/foohack/p/4119207.html 我相信写WIN32程序的人&#xff0c;做过DLL&#xff0c;都会很清楚__declspec(dllexport)的作用&#xff0c;它就是为了省掉在DEF文件中手工定义导出哪些函数的一个方法。当然&#xff0c;如果你的DLL里全是C的…

VS BUG(5) error C2491: “****“: 不允许 dllimport 函数 的定义

VS BUG&#xff08;5&#xff09; error C2491: "****": 不允许 dllimport 函数 的定义 前言一. BUG提示二. 分析解决三. 小结 前言 程序员难免要与BUG打交道&#xff0c;本系列将记录自己在VS平台下代码调试过程中遇到的一些BUG&#xff0c;希望对大家遇到相关问题…

C#中DllImport使用法汇总

(转) 最近使用DllImport&#xff0c;从网上百度后发现&#xff0c;大部分内容都是相同&#xff0c;又从MSDN中搜集下&#xff0c;现将内容汇总&#xff0c;与大家分享。 大家在实际工作学习C#的时候&#xff0c;可能会问&#xff1a;为什么我们要为一些已经存在的功能&#xf…

dllexport和dllimport

在VS中&#xff0c;如果要跨项目使用类或变量&#xff0c;就必须用到dllexport和dllimport&#xff0c;下面分别举例全局变量&#xff0c;函数和类跨项目使用。 环境准备&#xff1a;使用VS分别新建一个windows应用程序和DLL项目&#xff0c;windows应用程序项目名称为ConsoleA…

简记C#DllImport异常

C#开发过程中&#xff0c;有些动态库引用不了&#xff0c;需要用DllImport加载该文件动态库&#xff1b; 然后在引用的过程中会碰到各种问题&#xff0c;当然网上各种回答&#xff0c;能解决大部分问题。 我在这里简单记录下问题的解决方案&#xff1a; ”尝试读取或写入受保…

关于c++动态库的dllexport和dllimport

先推荐一款比Microsoft Coplilot更好用的辅助编程工具——Cursor&#xff0c; 一款基于GPT4的新一代辅助编程神器——Cursor&#xff0c;官网介绍说是与OpenAI合作并且基于GPT4。自己体验了下&#xff0c;确实不错&#xff0c;值得尝试。 官网地址&#xff1a; Cursor | Build…

C# dllimport

一、DllImport是System.Runtime.InteropServices命名空间下的一个属性类&#xff0c;其功能是提供从非托管DLL导出的函数的必要调用信息 DllImport的定义如下&#xff1a; public class DllImportAttribute:System.Attribute { public DllImportAttribute(string dllName) {……

C#中DllImport用法和路径问题

DllImport 是System.Runtime.InteropServices命名空间下的一个属性类&#xff0c;其功能是提供从非托管DLL导出的函数的必要调用信息。 DllImport属性应应用于方法&#xff0c;要求最少要提供包含入口点的dll的名称。 文章目录 一 DllImport的定义如下&#xff1a;二 DllImpo…

1-5(中文版)听力积累

O 听力积累 KR 参照连接&#xff0c;建议看一看 听力学习步骤 选择材料&#xff1a;使用English Pod材料 Englishpod是一家公司叫做Praxis Language 推出的收费讲座。讲座高度还原生活场景&#xff0c;两位优秀的主持人以轻松聊天的方式讲解点评场景内容&#xff0c;在此过…

该如何拯救我的英语

说来羞愧&#xff0c;从初中开始&#xff0c;就算到大学本科毕业为止吧&#xff0c;英语也算得上是持续地学习了有 10 年时间了&#xff0c;十年啊&#xff0c;十年了&#xff0c;你知道这十年我是怎么。。。。emmm&#xff0c;十年时间就算是一天只记一个单词&#xff0c;那少…

英语磁带与计算机磁带区别,小学英语教材配听力磁带 家长:谁还用复读机?...

时间倒回十多年&#xff0c;大家听歌、听英语还是用磁带&#xff0c;复读机、录音机也是学生人手必备的学习用品。但在各种高端电子产品充斥的今天&#xff0c;再去找个录音机可能就非常困难了。这不&#xff1f;刚刚开学&#xff0c;就有小学一年级的家长被难倒了&#xff0c;…

小学听力测试英语软件,亲测:好用的小学英语软件有哪些?这6款通通安利给大家!...

原标题&#xff1a;亲测&#xff1a;好用的小学英语软件有哪些&#xff1f;这6款通通安利给大家&#xff01; 首先&#xff0c;老师需要提前表明的是&#xff1a; 今天给大家推荐的这8款好用的小学英语软件&#xff0c;有的是我亲自测试过的&#xff0c;有的是同办公室的英语老…

什么软件能做英语测试卷听力,请问谁知道那些英语课本、期中期末考试的听力朗读的声音是怎么合成的?用什么软件?谢谢了...

满意答案 ceterry 2014.02.02 采纳率&#xff1a;57% 等级&#xff1a;12 已帮助&#xff1a;10834人 这些都是用 能说会道 XP 这个软件合成的&#xff0c;只需要课文的文字内容就可以转换成MP3的语音资料&#xff0c;还带LRC字幕&#xff0c;很方便&#xff0c;效果也好 “…

四六级英语听力软件测试,三款精品英语听力软件,提高四六级听力有诀窍

原标题&#xff1a;三款精品英语听力软件,提高四六级听力有诀窍 英语听力是所有英语考试中不可忽视的一个环节。然而在我们日常学习生活中&#xff0c;尤其是四六级备考&#xff0c;不乏只记单词不善听的情况&#xff0c;一个很重要的原因在于很多学生认为训练四六级听力太麻烦…

小学听力测试英语软件,你知道有哪些软件适合给小学生练习在线英语听力吗?...

前言&#xff1a; 随着英语听力软件在英语学习者当中的普及&#xff0c;如何挑选合适的听力软件倒成了技术活儿。你知道有哪些软件适合给小学生练习在线英语听力吗&#xff1f;今天为大家推荐3款好用的。 英语听力软件自推广以来&#xff0c;其趣味性和便捷性都是毋庸置疑的&am…