uni-app和web-view页面相互传参

这篇具有很好参考价值的文章主要介绍了uni-app和web-view页面相互传参。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

uni-app和web-view页面相互传参

首先:这里说的是uni-app开发的APP项目,嵌入web-view页面,并进行相互传参,如果和您想了解的内容相符,请继续阅读。

一、说到web-view嵌入uni-app开发的APP,传参方面很多人首先会想到url传参。
<!-- app端 -->
<view>
    <web-view src="www.xxxxx?name=张三"></web-view>
</view>
//web端
alert(this.$route.query.name) //张三
这种方法是app向webview传参最简单的方式,但也存在许多弊端:

1.参数会被抓取,如果携带敏感信息会存在安全隐患;

2.url会有长度限制,如果携带的数据过多会传不过去;

3.没有对应的webview向app传参的回传方法;

4.(重要)不够装逼!!!

二、下面详细说一下我在项目中用的方法,使用plus.webview.create(url, id, style, {data:{}})的方法携带参数,并使用uni.postMessage()的方法回传参数。

当app给web传参时:

app中代码如下:

let wv = plus.webview.create(
    'xxx.xxxx.xxx?t=' + new Date().getTime(),//date保证不走缓存
    'batch_view',
    {
        top: '0',
        left: '0',
        height: '100%',
        width: '100%'
    },
    {
        data: {
            token: token,
            userInfo: userInfo,
            implantType: 'uniapp'
        }
    }) //不用data键值对的方式传的话,h5接收后会是多个字段,而非一个对象
let currentWebview = this.$mp.page.$getAppWebview()
currentWebview.append(wv);//重要,否则会失效

H5中代码如下:

if (window.plus) {
    plusReady();
}//加上此判断以免再浏览器打开h5页面时报plus is not define
function plusReady() {
    if (plus.webview.getWebviewById("batch_view")) {
        const appData = plus.webview.getWebviewById("batch_view").data;
        alert(JSON.stringfy(appData))
    }
}

当web给app传参时:

H5中代码如下:

<!-- index.html中body引入uni.webview -->
<body>
    <div id="app"></div>
    <script type="module" src="/src/main.ts"></script>
    <script
            type="text/javascript"
            src="https://unpkg.com/@dcloudio/uni-webview-js@0.0.3/index.js"
            ></script>

    <!-- 以下为验证是否引入成功(可删) -->
    <script type="text/javascript">
        //  待触发 `UniAppJSBridgeReady` 事件后,即可调用 uni 的 API。
        document.addEventListener("UniAppJSBridgeReady", function () {
            uni.postMessage({
                data: {
                    action: "6666", // 这是传的参数
                },
            });
        });
    </script>
</body>
//正常使用直接调用即可
uni.postMessage({
    data: {
        action: "noToken", // 这是传的参数
    },
});

app中代码如下:

//建议写在该webview嵌入页面的onLoad生命周期中
plus.globalEvent.addEventListener('plusMessage', function(msg) {
    console.log(msg.data.args.data.arg)//web传来的参数
    if (msg.data.args.data.arg?.action == 'noToken') {
        uni.clearStorageSync()
        uni.reLaunch({
            url: '/pages/login/index'
        })
    } 
})

这里说一下,官方官方推荐写法是下面这样,如果是自己再html中方创建的可以使用这种方式,我们是使用plus.webview.create创建的webview木有@message,故用了以上方法。文章来源地址https://www.toymoban.com/news/detail-473091.html

<web-view  @message="handlePostMessage"></web-view>
ok,到这里就结束了,有不懂的小伙伴欢迎评论区提问。

到了这里,关于uni-app和web-view页面相互传参的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • uni-app web-view的使用

    在上一页点击需要跳转到app内置的浏览器里(app跳h5页面),uniapp提供了web-view 需要新建页面,在新页面里引用web-view,在新页面里才加上网址(h5) 1,在所需页面引入 1,在项目里(uni-app)运用(子传父) 3,html页面 https://gitee.com/dcloud/uni-app/raw/dev/dist/uni.webview.1.5.4.js

    2024年02月11日
    浏览(34)
  • uni-app开发微信小程序 web-view通讯

    最近开发了一个微信小程序嵌套vue页面 vue页面 有时候会使用到微信小程序的api 但是有的api他h5是不支持的  官方文档中提供的两种方法 @message 内嵌的h5页面不支持 Window的postMessage 在h5端使用没啥问题,这该死的uni-app页面不管怎么弄都会报那个window的错  还是我太菜了。。。

    2024年02月19日
    浏览(41)
  • uniapp系列-超详细教你在uni-app+vue3里通过web-view组件传递信息打开H5页面写入localstorage并解决兼容性

    web-view 是一个 web 浏览器组件,可以用来承载网页的容器,会自动铺满整个页面(nvue 使用需要手动指定宽高)。 点击这里直达官网文档 点击这里下载我的代码demo 本文最下面还有一些 常见或者奇怪问题解决方案 哦~ 之前开发好的H5页面,不想重新开发,想要直接放进项目用

    2024年02月09日
    浏览(37)
  • uniapp的小程序中使用web-view进行相互传参,并监听web-view的返回键

    H5页面中 1.引入微信js https://res.wx.qq.com/open/js/jweixin-1.4.0.js 2.引入 uniapp 的jdk文件(去官网下到本地)( 引入一定要放到body下面,不然UniAppJSBridgeReady不生效 ) 3.写好UniAppJSBridgeReady vue页面中接收值 在vue的h5页面中 在uniapp页面中通过@message拿值 原因:官方说小程序使用web-view是

    2024年02月08日
    浏览(35)
  • 跨平台应用开发进阶(五十)uni-app ios web-view嵌套H5项目白屏问题分析及解决

    应用 uni-app 框架开发好APP上架使用过程中,发现应用经过长时间由后台切换至前台时,通过 webview 方式嵌套的H5页面发生白屏现象。 任何手机设备上,当手机内存不足时,os都会回收资源。一般是先回收后台打开的资源。如果当前应用占用的资源过高,当前应用也有可能崩溃

    2024年02月14日
    浏览(39)
  • 【小程序】uni-app 页面的传参和接参

    值得一提的是小程序只能使用字符串的方式进行传递,不像vue的路由传参。至于为什么要这样,这就需要看文档怎么说了。 注意:传递参数只能以 ?key=valuekey=value 方式传递 使用 onLoad() 钩子函数来接收 小程序只能以 字符串的方式进行传递和接收,那么复杂类型对象和数组怎

    2024年02月02日
    浏览(35)
  • uniapp 开发 APP 使用 web-view 引入H5 app与 h5 页面通信

    uniapp 可以同时兼容 APP 和 H5,但有时候有些功能在 APP 中实现不了而在 H5 中可以实现,就可以采用 web-view 的方式在 APP 模式下显示 H5 页面。但是 APP 和 H5 储存的参数是不能共享的,例如token,就涉及到 APP 与 H5 之间的参数传递。 H5 向 APP 传参:引入 webview.js ,调用 uni.postMes

    2024年02月13日
    浏览(31)
  • web-view往h5传参及传参乱码问题

    1、微信端的操作 往wxml中配置web-view 并在对应js中动态设置路径的参数 在需要的地方修改其路径参数 2、h5端(接受上面传进来的参数) 注:这里建议如果h5是vue项目的话,可以本地映射一个地址出去。在vue.config.js下配置devServer--host设置为本机ip地址,接着小程序接入该地址用

    2024年02月09日
    浏览(23)
  • uniapp web-view页面层级过高,想在web-view上层再加入按钮,采用plus.nativeObj.View实现。动态创建web-view解决切换src后丢失背景问题。

    需求 :有两个web-view页面,需要添加按钮,动态切换web-view的src进行页面切换 问题 :uniapp的web-view层级很高,通过positon的z-index无法将其他元素置于web-view页面上层 解决方式 :采用底层组件plus.nativeObj.View创建视图,该视图比web-view层级高,可在web-view上层添加 按钮,图片,矩

    2024年02月11日
    浏览(64)
  • 小程序之web-view中的页面分享

    由于整个小程序都是用web-view嵌入的,这个时候,如果单纯的进行页面分享,只会导致不管在web-view的哪个页面进行分享,都会在点击后进入首页。 首先是开启小程序的页面分享功能 然后在onShareAppMessage中包装一下分享的信息,该回调是在点击右上角的分享之后,但是信息还

    2024年02月04日
    浏览(31)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包