uniapp 嵌入外部h5 报错/收不到消息

uniapp 嵌入外部h5 报错/收不到消息

  • [h5 不是uniapp 框架](#h5 不是uniapp 框架)
  • [h5 是uniapp 框架](#h5 是uniapp 框架)

使用的版本:

h5 不是uniapp 框架

报错:会报window.__f__is not function...

在引入uni.webview.1.5.8.js 最前面加入window.f = function() {};

h5 是uniapp 框架

报错:会报window.__f__is not function...

此时加入 window.f = function() {}; 还是不能收到消息,需要在引入uni.webview.1.5.8.js 后打补丁

javascript 复制代码
  <script type="text/javascript" >
        window.__f__ = function() {};
  </script>
   <script type="text/javascript" src="/js/uni.webview.1.5.8.js"></script>
   <script>
        // 等待 uni.webview.js 加载完成
        document.addEventListener('DOMContentLoaded', function() {
            setTimeout(function() {
                console.log('检查 uni.postMessage 是否可用...');

                // 如果 uni.postMessage 不存在,手动创建
                if (window.uni && !window.uni.postMessage) {
                    console.log('uni.postMessage 不存在,手动创建');

                    // 创建 uni.postMessage 方法
                    window.uni.postMessage = function(message) {
                        console.log('uni.postMessage 被调用:', message);

                        // 方式1:使用 __dcloud_weex_postMessage(weex 环境)
                        if (window.__dcloud_weex_postMessage) {
                            console.log('使用 __dcloud_weex_postMessage');
                            window.__dcloud_weex_postMessage({
                                data: message.data || []
                            });
                            return;
                        }

                        // 方式2:使用 __uniapp_x_postMessage(uni-app x 环境)
                        if (window.__uniapp_x_postMessage) {
                            console.log('使用 __uniapp_x_postMessage');
                            window.__uniapp_x_postMessage({
                                options: { timestamp: +new Date },
                                name: 'postMessage',
                                arg: message.data || {}
                            });
                            return;
                        }

                        // 方式3:使用 plus.webview.postMessageToUniNView(plus 环境)
                        if (window.plus && window.plus.webview) {
                            console.log('使用 plus.webview.postMessageToUniNView');
                            try {
                                var webviewIds = [];
                                var currentWebview = plus.webview.currentWebview();
                                if (currentWebview) {
                                    var parentWebview = currentWebview.parent();
                                    if (parentWebview) {
                                        webviewIds.push(parentWebview.id);
                                    }

                                    // 发送消息到 uni-app 服务层
                                    plus.webview.postMessageToUniNView({
                                        type: "WEB_INVOKE_APPSERVICE",
                                        args: {
                                            data: {
                                                options: { timestamp: +new Date },
                                                name: 'postMessage',
                                                arg: message.data || {}
                                            },
                                            webviewIds: webviewIds
                                        }
                                    }, "__uniapp__service");

                                    console.log('✓ 消息已发送到 uni-app 服务层');
                                }
                            } catch(e) {
                                console.error('plus.webview.postMessageToUniNView 失败:', e);
                            }
                            return;
                        }

                        console.warn('没有可用的 postMessage 方式');
                    };

                    console.log('✓ uni.postMessage 方法已创建');
                } else {
                    console.log('uni.postMessage 已存在:', typeof window.uni?.postMessage);
                }
            }, 100);
        });
    </script> 
  
相关推荐
snotJam5 小时前
关于Uniapp的Android自定义基座使用
android·uni-app
今年下半年1 天前
【微信小程序】uni-app + Vue3 + Vite 的小程序项目实现「进入指定范围才能打卡」的考勤功能
微信小程序·uni-app·定位·考勤
郑州光合科技余经理5 天前
海外版外卖加盟:总站与分站配送规则怎么分开管
java·开发语言·前端·后端·uni-app·php·ai编程
遗憾随她而去.6 天前
uniApp跨端开发: 解决不同平台显示差异问题
uni-app
程序鉴定师9 天前
2026年深圳小程序/App开发公司技术选型指南:从架构设计到交付标准全维度评估
java·小程序·uni-app·php·objective-c
Q26433650239 天前
【有源码】基于uni-app的旅游行程规划小程序-基于微信小程序的智慧文旅综合服务平台
java·微信小程序·小程序·uni-app·毕业设计·springboot·源代码
qq_3168377510 天前
阿里云百炼 fun-asr-realtime uniapp vue3 调用
javascript·vue.js·uni-app
特创数字科技10 天前
uniapp 图片全能处理|全平台支持(鸿蒙、安卓、苹果、web),实现九宫格、水印、滤镜、压缩、拼图
uni-app
2501_9160074710 天前
苹果应用商店App Store上架费用标准及原因解析
android·ios·小程序·https·uni-app·iphone·webview
00后程序员张11 天前
苹果App Store上架指南:费用、原理与步骤详解
android·ios·小程序·https·uni-app·iphone·webview