3.遇到的问题及解决方案

发布时间:2025-06-24 19:12:09  作者:北方职教升学中心  阅读量:755


3.1 H5有多个页面,

代码实现。

app端实现代码。
解决方案,

3.遇到的问题及解决方案。添加通信,根据网页标题判断是否退出当前页面,

onShow() { var pages = getCurrentPages() var page = pages[pages.length - 1] var title = page.$holder.navigationBarTitleText uni.webView.postMessage({ data: { method: 'getTitle', value: title } }); }。onBackPress(event) { if (this.pageTitle == 'Invitar amigos') { uni.switchTab({ url: '/pages/home/index' }) } else { this.$refs.webview.evalJs("javascript:history.back(-1)"); } return true },app点击退出webview页面。每个新页面H5将网页标题传输到应用程序端,

onPostMessage(e) { let method = e.detail.data[0].method let value = e.detail.data[0].value switch (method) { case 'getTitle': this.pageTitle = value uni.setNavigationBarTitle({ title: value }) break; default: break; } }。否则控制webview页面退出。然后应用程序端手动更改标题(暂时想到愚蠢的方法,

注:调用uni.postMessage 必须添加webview。

注:uni.webview.1.5.2.js 在static文件下放置文件路径

资源文件:https://www.alipan.com/s/3DayWBod57B。

H5端,app点击退出webview页面。

3.2 H5跳转到二级页面,调用app端方法。

2.1 manifest.json配置

将模板路径指向项目中的index.html。

1.实现app终端

注:为实现实时通信,

注:调用uni.postMessage 必须添加webview。

2.2 index模板.html配置。

3.2 H5跳转到二级页面,其实也可以直接传递每个标题的具体值。在每个单页onshow获取网页标题,欢迎与其他解决方案沟通)。app端使用.nvue无法显示网页标题。app退出拦截,app终端页面为.nvue。

解决方案,

<template>    <view class="content">        <view class="web-view">            <web-view class="web-view" :src="url" ref="webview" @onPostMessage="onPostMessage"></web-view>        </view>    </view></template><script>    export default {        data() {            return {                url: '',            }        },        methods: {            onPostMessage(e) {                let method = e.detail.data[0].method                let value = e.detail.data[0].value                switch (method) {                    case 'test':                        console.log("test")                        break;                    case 'back':                        uni.switchTab({                            url: '/pages/home/index'                        })                        break;                    case 'copy':                        uni.setClipboardData({                            data: value,                            showToast: false,                            success: function() {                                uni.showToast({                                    title: 'copy',                                    duration: 2000                                });                            }                        })                        break;                    default:                        break;                }            }        }    }</script><style scoped lang="scss">    .content {        width: 750rpx;        flex: 1;        background-color: #f7f7f7f7;        display: flex;        align-items: center;        height: 100vh;        .web-view {            height: 100%;            width: 750rpx;            flex: 1;        }    }</style>

2.H5端实现(基于uniapp的H5)。

<!DOCTYPE html><html lang="en">    <head>        <meta charset="UTF-8" />        <title>            <%= htmlWebpackPlugin.options.title %>        </title>        <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>        <div id="app"></div>    </body>    <script type="text/javascript" src="./static/js/uni.webview.1.5.2.js"></script>    <script>        document.addEventListener('UniAppJSBridgeReady', function() {            uni.webView.getEnv(function(res) {                console.log('当前环境:' + JSON.stringify(res));            });        });    </script></html>

2.3 实现H5代码,

uni.webView.postMessage({ data: { method: 'getTitle', value: title } });

现在可以在H5端实现APP端的调用方法。