uni-app webview uni.postMessage 在ios真机调试正常 正式上架后出现异常

uni-app webview uni.postMessage 在ios真机调试正常 正式上架后出现异常

开发环境 版本号 项目创建方式
PC开发环境 Windows HBuilderX
windows11
手机系统 版本号
---------------- -------- ------------
iOS iOS 17
手机厂商
苹果
手机机型
iPhone
页面类型
vue
vue版本 vue2

操作步骤:

  • web端采用vue写一个按钮,点击后调用Uni.postMessage,app收到信息后并弹出对话框。

预期结果:

  • 在ios正式上架安装后可以接收到网页信息。

实际结果:

  • ios正式包没有任何反应。

bug描述:

webview uni.postMessage 安卓真机调试,正式包都没有问题。ios真机调试正常,正式包上架后异常,没有接收到网页发回的消息。

<web-view v-if="face"  
            :src="'https://study.yunfangxinxi.com/open/face?id='+ user.id + '&amp;recordid=' + record.id + '&amp;client=app'"  
            @message="start"&gt;&lt;/web-view&gt;

web端代码

import * as uni from './uni.webview.1.5.5.js'    

document.addEventListener("UniAppJSBridgeReady", function() {    
    Vue.prototype.myUni = uni    
});
 this.myUni.postMessage({  
                    data: {  
                        code: 0,  
                    }  
                });  

更多关于uni-app webview uni.postMessage 在ios真机调试正常 正式上架后出现异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html

1 回复

更多关于uni-app webview uni.postMessage 在ios真机调试正常 正式上架后出现异常的实战教程也可以访问 https://www.itying.com/category-93-b0.html


uni-app 中,webviewuni.postMessage 在 iOS 真机调试时正常,但在正式上架后出现异常,可能是因为以下几个原因导致的:

1. iOS App Transport Security (ATS) 限制

iOS 的 ATS 默认要求所有网络请求都必须使用 HTTPS。如果你的 webview 加载的是 HTTP 资源,可能会导致某些功能无法正常工作。

解决方案:

  • 确保 webview 加载的资源使用 HTTPS。
  • 如果必须使用 HTTP,可以在 Info.plist 中配置 ATS 的例外:
    <key>NSAppTransportSecurity</key>
    <dict>
        <key>NSAllowsArbitraryLoads</key>
    <true/>
    </dict>
    

2. iOS 版本差异

在真机调试时,可能使用的是开发环境的配置,而在正式上架后,使用的是生产环境的配置。iOS 不同版本或不同设备可能会有不同的行为。

解决方案:

  • 确保在开发环境和生产环境中的配置一致。
  • 使用 iOS 模拟器或真机进行多版本测试,确保兼容性。

3. JavaScript 代码压缩或混淆

在生产环境中,通常会对 JavaScript 代码进行压缩或混淆,这可能会导致 uni.postMessage 相关的代码出现问题。

解决方案:

  • 检查生产环境的构建配置,确保 uni.postMessage 相关的代码没有被错误地压缩或混淆。
  • vue.config.jswebpack 配置中,排除相关代码的压缩或混淆。

4. Webview 的缓存问题

在正式上架后,webview 可能会缓存旧的资源,导致新版本的代码没有生效。

解决方案:

  • 确保 webview 加载的资源版本是最新的。
  • 在 URL 中添加时间戳或版本号,强制刷新缓存:
    const url = `https://example.com/index.html?v=${Date.now()}`;
    

5. iOS 的 Webview 限制

iOS 的 WKWebView 在某些情况下可能会限制某些 JavaScript 功能的执行,特别是在生产环境中。

解决方案:

  • 确保 webview 的配置允许 JavaScript 执行:
    const webview = uni.createWebViewContext('webview');
    webview.loadURL('https://example.com');
    webview.setJavaScriptEnabled(true);
    

6. uni.postMessage 的使用问题

确保 uni.postMessage 的使用方式正确,特别是在生产环境中。

解决方案:

  • 检查 uni.postMessage 的调用方式和参数,确保其符合规范。
  • 确保 webview 页面正确监听 message 事件:
    window.addEventListener('message', function(event) {
        console.log('Received message:', event.data);
    });
回到顶部