uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯

这篇具有很好参考价值的文章主要介绍了uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

最近在小程序项目用到web-view,需要web-view承载的H5和小程序通讯,碰到个大坑,所以写一下实现过程及怎么避坑。

一、小程序向web-view承载的H5传递参数,直接在url后接参数即可(xxxxx.com)
二、H5向小程序发送消息
  1. 在uniapp项目根目录创建 模板html

uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯,uniapp,uni-app,微信小程序,vue,前端,javascript

2、然后在模板html里引入微信SDK和uni SDK;注意,坑来了,uniapp官方提供的SDK链接 是错的(坑了我半天)用这个:https://js.cdn.aliyun.dcloud.net.cn/dev/uni-app/uni.webview.1.5.2.js ,模板html代码如下


<!DOCTYPE html>
<html lang="zh-CN">
    <head>
        <meta charset="utf-8">
        <meta http-equiv="X-UA-Compatible" content="IE=edge">
        <title>
            <%= htmlWebpackPlugin.options.title %>
        </title>
        <!-- Open Graph data -->
        <!-- <meta property="og:title" content="Title Here" /> -->
        <!-- <meta property="og:url" content="http://www.example.com/" /> -->
        <!-- <meta property="og:image" content="http://example.com/image.jpg" /> -->
        <!-- <meta property="og:description" content="Description Here" /> -->
        <script>
            var coverSupport = 'CSS' in window && typeof CSS.supports === 'function' && (CSS.supports('top: env(a)') || CSS.supports('top: constant(a)'))
            document.write('<meta name="viewport" content="width=device-width, user-scalable=no, initial-scale=1.0, maximum-scale=1.0, minimum-scale=1.0' + (coverSupport ? ', viewport-fit=cover' : '') + '" />')
        </script>
        <link rel="stylesheet" href="<%= BASE_URL %>static/index.<%= VUE_APP_INDEX_CSS_HASH %>.css" />
    </head>
    <body>
        <noscript>
            <strong>Please enable JavaScript to continue.</strong>
        </noscript>
        <div id="app"></div>
        <!-- built files will be auto injected -->
    </body>
    
    <!-- 可更换,两个SDK都可使用最近更新的版本 -->
    <!-- 微信 JS-SDK 如果不需要兼容小程序,可以不引用 JS 文件。 两个文件同时引入时,微信的需要在前-->
    <script type="text/javascript" src="//res.wx.qq.com/open/js/jweixin-1.4.0.js"></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>
    
    <script>
        //执行UniAppJSBridgeReady,通过后才可调用uni的api
        document.addEventListener('UniAppJSBridgeReady', function() {
            console.log(uni)
            console.log('uni.webView', uni.webView)
            uni.webView.getEnv(function(res) {
                console.log('当前环境:' + JSON.stringify(res));
            });
        });
    </script>
</html>

3、在manifest.json中引入你创建好的模板html

uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯,uniapp,uni-app,微信小程序,vue,前端,javascript

4、然后就可以在你的页面使用


<template>
    <view class="layout">
        <view class="content">
            <view class="footer-box">
                <view class="confirm" @click="confirm">确认</view>
            </view>
        </view>
    </view>
</template>
<!-- <script src="./index.js"></script> -->

<script>
    export default {
        data() {
            return {
                
            }
        },
        onLoad() {
            
        },

        methods: {
            confirm() {
                //调用 uni.webView.postMessage 方法,向uniapp发送消息 postMessage ,
                //uniapp会在特定时机(后退、组件销毁、分享)触发并收到消息

                //先调用 uni.webView.navigateBack ,接着再调用 uni.webView.postMessage 
                //就会触发并接收到消息(调用顺讯不要反了,不然会触发不了发送消息)
                uni.webView.navigateBack()
                uni.webView.postMessage({
                    data: {
                        action: 'message' //发送的消息
                    }
                })
            },
        }
    }
</script>

5、最后,在web-view里接收消息即可文章来源地址https://www.toymoban.com/news/detail-649193.html


<template>
    <view>
        <web-view :webview-styles="webviewStyles" :src="webViewUrl" @message="getMssage"></web-view>
    </view>
</template>

<script>
    export default {
        data() {
            return {
                webviewStyles: {
                    progress: {
                        color: ' rgba(0, 126, 255, 0.99)'
                    }
                },
                webViewUrl: null
            }
        },
        
        onLoad() {
            //小程序仅支持加载网络网页,不支持本地html
            //因为是小程序所以需要进行 decodeURIComponent
            this.webViewUrl = decodeURIComponent('https://baidu.com?params=aaa')
        },

        methods: {
            // 在uniap中以 @message 触发并收到消息
            getMssage(e) {
                //接收到的消息 e.detail.data 数据格式为数组
                console.log('收到网页发来的消息', e.detail.data[0].action)
            },
        },
    }
</script>

到了这里,关于uniapp小程序使用web-view承载的html页面是uniapp H5时,H5与小程序通讯的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

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

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

相关文章

  • 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)
  • 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无法打开该H5页面不支持打开的解决方法

    我在 正式上线版 小程序使用  web-view  组件测试时提示:“无法打开该页面,不支持打开 https://xxxxxx,请在“小程序右上角更多-反馈与投诉”中和开发者反馈。” 奇怪的是,“ 真机调试”、“开发模式 ”都可以使用  web-view  组件访问我需要的路径。只有“体验版”、“线

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

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

    2024年02月04日
    浏览(31)
  • 小程序通过<web-view>跳转H5页面

     小程序通过web-view跳转H5页面 vue项目  小程序项目 在小程序app.json文件,配置vue跳小程序页面的路径   \\\"pages\\\":[     \\\"pages/wxpay/wxpay\\\"   ],

    2024年02月08日
    浏览(36)
  • 钉钉小程序 打开web-view页面显示白屏

     注意: 先检查是否配置HTTP 安全域名和 Webview 安全域名 !!一定要配置 配置后,我真机调试时ios手机仍然无法打开。 原因:发现url中存在中文字符 解决办法:使用encodeURIComponent, encodeURIComponent()  函数通过将特定字符的每个实例替换成代表字符的 UTF-8 编码的一个、两个

    2024年02月02日
    浏览(59)
  • 微信小程序在web-view页面增加一个按钮

    需求: 在微信小程序中通过web-view打开H5页面,需要小程序端在页面中增加一个可以请求接口的按钮 实现方法 通过在web-view中嵌套cover-view标签来实现( 注意: cover-view只支持嵌套 cover-view、cover-image,可在 cover-view 中使用 button,但是本人在里面使用button标签时,对button添加样式无效

    2024年02月07日
    浏览(56)
  • 小程序中web-view网页中打开或返回小程序页面

    小程序中web-view网页中使用JSSDK提供的接口打开或返回小程序页面 1、引入 JSSDK 文件 2、判断是否在小程序环境 3、根据是否小程序环境,执行操作  或   开放标签H5跳转小程序

    2024年02月16日
    浏览(31)
  • 小程序web-view,h5页监听返回到小程序指定页面

    在h5页面进行监听返回跳转判断: created(){ this.pushHistory(); window.addEventListener(\\\"popstate\\\", function(e) { //首页点击返回,直接关闭网页 WeixinJSBridge.call(\\\'closeWindow\\\'); uni.reLaunch({ url: `xxxx`, }); }, false); }, methods:{ pushHistory() { var state = { title: \\\"title\\\", url: \\\"#\\\" }; window.history.pushState(state, state.title,

    2024年02月11日
    浏览(35)

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

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

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

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

二维码1

领取红包

二维码2

领红包