1***@qq.com
1***@qq.com
  • 发布:2024-03-05 12:53
  • 更新:2024-03-05 12:53
  • 阅读:2990

(已解决)关于uniapp-微信小程序-监听web-view中的postMessage无响应问题

分类:uni-app

按照官方给出的示例 并且添加上message事件:

<template>  
    <view>  
        <web-view :webview-styles="webviewStyles" src="https://uniapp.dcloud.io/static/web-view.html" @message="message"></web-view>  
    </view>  
</template>  

<script>  
    export default {  
        data() {  
            return {  
                webviewStyles: {  
                    progress: {  
                        color: '#FF3333'  
                    }  
                }  
            }  
        },  
methods:{  
message(data){  
console.log('我触发了')  
}  
}  
    }  
</script>

注意的是 message会在特定的时机接收到webview发送的消息(后退、组件销毁、分享),所以在H5页面发送postMessage后,在H5页面应当有后退、组件销毁、分享相关操作,那么在@message中才会调用。
于是我在H5中远程调用了uni :<script type="text/javascript" src="https://hellouniapp.dcloud.net.cn/hybrid/html/uni.webview.1.5.5.js"></script>
并且使用了postMessage

uni.postMessage({  
            data: { text:'123' }  
          });

但是在uni中却无法接收到,并且发现navigateBack等函数也无法调用,在此之后,我在uni官网查看到相关示例:https://uniapp.dcloud.net.cn/component/web-view.html#postmessage;其中有一个web-view的示例页面:


我查看该页面的源代码后(view-source:https://uniapp.dcloud.io/static/web-view.html),发现少了相关的兼容模块,在webview中的h5页面添加相关兼容sdk后,就能正常接收到消息了,如下:

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) && /micromessenger/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>');  
            } else if (/quickapp/i.test(userAgent)) {  
                // quickapp  
                document.write('<script type="text/javascript" src="https://quickapp/jssdk.webview.min.js"><\/script>');  
            }  
            if (!/toutiaomicroapp/i.test(userAgent)) {  
                document.querySelector('.post-message-section').style.visibility = 'visible';  
            }
0 关注 分享

要回复文章请先登录注册