var vm = new Vue({ el: '#app', data: function () { return { isLoading: false, textInput: '', scanWorkstation: '', html5QrCode: null, pendingCallbacks: {} // 存储回调函数 } }, mounted() { // 初始化消息监听 window.addEventListener('message', this.handleH5Response); }, beforeDestroy() { // 清理事件监听 window.removeEventListener('message', this.handleH5Response); }, methods: { // 处理H5的响应 handleH5Response(event) { try { const data = JSON.parse(event.data); if (data.RequestId && typeof data.returnValue !== 'undefined') { const callback = this.pendingCallbacks[data.RequestId]; if (callback) { callback(data.returnValue); delete this.pendingCallbacks[data.RequestId]; } } } catch (e) { console.error('解析响应失败:', e); } }, // 启动扫描测试 startScanTest() { const requestId = Date.now().toString(); // 生成唯一请求ID const sendData = { Type: 'Scan', Barcode: 'TM250304-000104-2', Detail: 'detail info', Ip: '192.168.38.135', Port: '9100', RequestId: requestId // 添加请求标识 }; // 创建Promise等待响应 new Promise((resolve) => { this.pendingCallbacks[requestId] = resolve; // 发送消息 var result = uni.webView.postMessage({ data: JSON.stringify(sendData) }); alert(result); //// 设置超时处理 //setTimeout(() => { // if (this.pendingCallbacks[requestId]) { // delete this.pendingCallbacks[requestId]; // console.error('请求超时'); // resolve(-1); // 返回超时状态 // } //}, 5000); // 5秒超时 }).then(result => { console.log('操作结果:', result); // 这里处理返回结果 if (result === 0) { alert('操作成功!'); } else { alert('操作失败,错误码: ' + result); } }); } } });