uni-app 打包的app和uni-app打包的h5页面无法交互

发布于 1周前 作者 htzhanglong 来自 Uni-App

uni-app 打包的app和uni-app打包的h5页面无法交互

项目 信息
产品分类 uniapp/App
PC开发环境操作系统 Windows
PC开发环境操作系统版本号 10
HBuilderX类型 正式
HBuilderX版本号 3.96
手机系统 Android
手机系统版本号 Android 13
手机厂商 小米
手机机型 红米note8
页面类型 vue
vue版本 vue2
打包方式 云端
项目创建方式 HBuilderX

操作步骤:

uniapp 打包的app 和uniapp 打包的h5页面无法交互; 描述: 通过uniapp打包的app 以webview 的方式 打开 uniapp 打包的h5页面 ,然后点击 h5页面上的左上角 返回按钮和 系统返回按钮 不能监听 到这个事件。以至于 不能正常 进行后续操作。

预期结果:

uniapp 打包的app 和uniapp 打包的h5页面无法交互; 描述: 通过uniapp打包的app 以webview 的方式 打开 uniapp 打包的h5页面 ,然后点击 h5页面上的左上角 返回按钮和 系统返回按钮 不能监听 到这个事件。以至于 不能正常 进行后续操作。

实际结果:

uniapp 打包的app 和uniapp 打包的h5页面无法交互; 描述: 通过uniapp打包的app 以webview 的方式 打开 uniapp 打包的h5页面 ,然后点击 h5页面上的左上角 返回按钮和 系统返回按钮 不能监听 到这个事件。以至于 不能正常 进行后续操作。

bug描述:

uniapp 打包的app 和uniapp 打包的h5页面无法交互; 描述: 通过uniapp打包的app 以webview 的方式 打开 uniapp 打包的h5页面 ,然后点击 h5页面上的左上角 返回按钮和 系统返回按钮 不能监听 到这个事件。以至于 不能正常 进行后续操作。


2 回复

onBackPress({ from }) {
const currentWebview = this.$scope.$getAppWebview();
const webview = currentWebview.children()[0];
if (from === ‘backbutton’ && !this.isBack) {
webview.canBack(({ canBack }) => {
if (canBack) {
webview.back();
} else {
this.isBack = true;
uni.navigateBack();
}
});
return true;
}
return false;
},


uni-app 中,打包的 App 和 H5 页面之间的交互可能会遇到一些问题,主要是因为它们运行在不同的环境中。App 运行在原生容器中,而 H5 页面运行在浏览器环境中。以下是一些常见的问题和解决方案:

1. 跨域问题

  • 问题描述:H5 页面在浏览器中运行时,可能会遇到跨域问题,导致无法与 App 中的接口进行交互。
  • 解决方案
    • 在服务器端设置 CORS(跨域资源共享)头,允许 H5 页面访问。
    • 使用代理服务器来解决跨域问题。

2. 通信机制

  • 问题描述:App 和 H5 页面之间需要一种通信机制来传递数据和调用方法。
  • 解决方案
    • WebView 与 H5 通信:在 App 中使用 WebView 加载 H5 页面,并通过 postMessageevaluateJavascript 进行通信。
    • uni-app 的 uni.postMessageuni-app 提供了 uni.postMessage 方法,可以在 App 和 H5 页面之间传递消息。
    • JSBridge:使用 JSBridge 来实现 App 和 H5 页面之间的通信。

3. 环境判断

  • 问题描述:在代码中需要判断当前运行的环境是 App 还是 H5,以便执行不同的逻辑。
  • 解决方案
    • 使用 uni.getSystemInfoSync() 方法获取当前环境信息,判断 platform 字段。
    • 使用 process.env.VUE_APP_PLATFORM 来判断当前运行的环境。

4. API 兼容性

  • 问题描述:某些 API 在 App 和 H5 中的行为可能不一致,导致交互失败。
  • 解决方案
    • 在代码中根据环境判断,使用不同的 API 或逻辑。
    • 使用 uni-app 提供的跨平台 API,确保在不同环境中的一致性。

5. 调试工具

  • 问题描述:在开发过程中,调试 App 和 H5 页面的交互可能会比较困难。
  • 解决方案
    • 使用 Chrome DevToolsSafari Web Inspector 来调试 H5 页面。
    • 使用 Android StudioXcode 来调试 App 中的 WebView

6. 示例代码

  • App 向 H5 发送消息

    // App 端
    const webview = this.$scope.$getAppWebview();
    webview.evalJS("receiveMessageFromApp('Hello from App')");
    
    // H5 端
    function receiveMessageFromApp(message) {
        console.log("Received message from App:", message);
    }
  • H5 向 App 发送消息

    // H5 端
    uni.postMessage({
        data: {
            message: 'Hello from H5'
        }
    });
    
    // App 端
    plus.globalEvent.addEventListener('plusMessage', function(e) {
        console.log("Received message from H5:", e.data.message);
    });
回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!