h5页面通过postMessage传递title给webview
时间: 2024-10-25 08:15:19 浏览: 29
H5页面通过`postMessage`方法可以向Webview传递数据,包括像`title`这样的字符串信息。以下是基本步骤:
1. **在Webview端(通常是JavaScript)**:
首先,在Webview所在的窗口或iframe中监听`message`事件,当接收到H5发送的消息时处理它。例如:
```javascript
window.addEventListener('message', function(e) {
if (e.origin !== 'http://your-h5-url.com') return; // 检查消息来源
const title = e.data.title;
console.log('Received title:', title);
}, false);
```
2. **在H5页面(HTML/CSS/JS)**:
H5中调用`window.postMessage`函数,将数据(如`title`)作为参数传递,指定接收方(Webview的URL):
```javascript
// 假设document.getElementById('myWebView')是Webview的DOM元素ID
const webView = document.getElementById('myWebView');
webView.contentWindow.postMessage({ title: '这是要传递的标题' }, '*'); // '*'表示任意源都可以接收
```
相关问题
微信小程序webview嵌入h5页面 调用微信支付需要的完整代码
以下是微信小程序webview嵌入h5页面调用微信支付的完整代码:
HTML页面:
```
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>微信支付demo</title>
</head>
<body>
<button onclick="callPay()">微信支付</button>
<script type="text/javascript">
function callPay() {
// 构造支付参数
var params = {
appId: '你的appId',
timeStamp: '时间戳',
nonceStr: '随机字符串',
package: '预支付交易会话标识',
signType: 'MD5',
paySign: '支付签名'
};
// 调用微信支付接口
WeixinJSBridge.invoke('getBrandWCPayRequest', params, function(res){
// 支付结果处理
if(res.err_msg == "get_brand_wcpay_request:ok"){
// 支付成功
}else{
// 支付失败
}
});
}
// 判断是否在微信内置浏览器中打开
if (typeof WeixinJSBridge == "undefined"){
if( document.addEventListener ){
document.addEventListener('WeixinJSBridgeReady', callPay, false);
}else if (document.attachEvent){
document.attachEvent('WeixinJSBridgeReady', callPay);
document.attachEvent('onWeixinJSBridgeReady', callPay);
}
}else{
callPay();
}
</script>
</body>
</html>
```
小程序页面:
```
<web-view src="https://你的H5页面地址"></web-view>
```
小程序JS代码:
```
Page({
onReady: function () {
// 获取web-view组件
var webview = this.selectComponent("#webview");
// 监听web-view中的页面加载完成事件
webview.onMessage(function(e){
if(e.detail == 'loadFinish'){
// web-view中的页面加载完成后,调用支付接口
wx.request({
url: 'https://你的支付接口地址',
method: 'POST',
data: {
// 构造支付参数
appId: '你的appId',
timeStamp: '时间戳',
nonceStr: '随机字符串',
package: '预支付交易会话标识',
signType: 'MD5',
paySign: '支付签名'
},
success: function(res){
// 将支付参数传递给web-view中的页面
webview.postMessage({type: 'pay', data: res.data});
}
})
}
})
}
})
```
需要注意的是,在小程序中调用微信支付接口需要在小程序后台配置支付授权目录,否则会出现调用失败的情况。
uni.postMessage
uni.postMessage是一个用于在H5页面和原生App之间进行通信的方法。它可以在H5页面中使用,通过postMessage方法向原生App发送信息。在H5页面中,可以通过uni.postMessage({ data: { action: 'H5来了' } })来发送信息给原生App。这样原生App就可以通过监听message事件来接收来自H5页面的信息,并进行相应的处理。对于Vue页面,可以在created生命周期中添加window.addEventListener('message', this.handleMessage)来监听message事件,而在beforeDestroy生命周期中移除监听器window.removeEventListener('message', this.handleMessage),以确保在组件销毁时不再监听message事件。<span class="em">1</span><span class="em">2</span><span class="em">3</span>
#### 引用[.reference_title]
- *1* *3* [uniapp 与H5通信实操](https://blog.csdn.net/jkhedge/article/details/128715363)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
- *2* [uniapp 使用 webview 触发uni.postMessage](https://blog.csdn.net/qwe_aaaaa/article/details/126286725)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v92^chatsearchT0_1"}}] [.reference_item style="max-width: 50%"]
[ .reference_list ]
阅读全文