diff --git a/ckApp/App.vue b/ckApp/App.vue
index 8c2b7321..f3393a5b 100644
--- a/ckApp/App.vue
+++ b/ckApp/App.vue
@@ -1,15 +1,5 @@
-
+
diff --git a/nkebao/src/pages/iframe/index.tsx b/nkebao/src/pages/iframe/index.tsx
index 8b576add..521db96a 100644
--- a/nkebao/src/pages/iframe/index.tsx
+++ b/nkebao/src/pages/iframe/index.tsx
@@ -1,5 +1,6 @@
-import React, { useState, useEffect, useRef } from "react";
+import React, { useState, useEffect } from "react";
import style from "./index.module.scss";
+import { json } from "stream/consumers";
// 声明全局的 uni 对象
declare global {
@@ -19,41 +20,46 @@ const IframeDebugPage: React.FC = () => {
const [receivedMessages, setReceivedMessages] = useState([]);
const [messageId, setMessageId] = useState(0);
const [inputMessage, setInputMessage] = useState("");
- const [urlParams, setUrlParams] = useState>({});
- const [processedMessages] = useState(new Set()); // 用于防止重复处理消息
useEffect(() => {
- // 解析 URL 参数
- const parseUrlParams = () => {
- // 使用兼容的方式解析 URL 参数
- const search = window.location.search.substring(1); // 移除开头的 '?'
- const params: Record = {};
+ // 解析 URL 参数中的消息
+ const parseUrlMessage = () => {
+ const search = window.location.search.substring(1);
+ let messageParam = null;
if (search) {
const pairs = search.split("&");
- pairs.forEach(pair => {
+ for (const pair of pairs) {
const [key, value] = pair.split("=");
- if (key) {
- params[decodeURIComponent(key)] = decodeURIComponent(value || "");
+ if (key === "message" && value) {
+ messageParam = decodeURIComponent(value);
+ break;
}
- });
+ }
}
- setUrlParams(params);
- console.log("解析到的 URL 参数:", JSON.stringify(params));
-
- // 将 URL 参数作为消息添加到列表
- if (Object.keys(params).length > 0) {
- const paramMessage = `[${new Date().toLocaleTimeString()}] URL参数: ${JSON.stringify(params)}`;
- setReceivedMessages(prev => [paramMessage, ...prev]);
+ if (messageParam) {
+ try {
+ const message = decodeURIComponent(messageParam);
+ console.log("存客宝 收到消息:", message);
+ handleReceivedMessage(JSON.parse(message));
+ // 清除URL中的message参数
+ const newUrl =
+ window.location.pathname +
+ window.location.search
+ .replace(/[?&]message=[^&]*/, "")
+ .replace(/^&/, "?");
+ window.history.replaceState({}, "", newUrl);
+ } catch (e) {
+ console.error("解析URL消息失败:", e);
+ }
}
};
// 初始化 uni-app web-view SDK
const initUniSDK = () => {
- console.log("web-view SDK 初始化完成");
-
- // 页面加载完成后发送准备就绪消息,包含 URL 参数
+ // console.log("web-view SDK 初始化完成");
+ // 发送准备就绪消息
setTimeout(() => {
sendMessageToParent({
id: 0,
@@ -61,7 +67,6 @@ const IframeDebugPage: React.FC = () => {
data: {
status: "loaded",
url: window.location.href,
- urlParams: urlParams,
},
timestamp: Date.now(),
});
@@ -71,24 +76,16 @@ const IframeDebugPage: React.FC = () => {
// 监听 SDK 初始化完成事件
document.addEventListener("UniAppJSBridgeReady", initUniSDK);
- // 解析 URL 参数
- parseUrlParams();
+ // 解析 URL 参数中的消息
+ parseUrlMessage();
- // 检查URL参数中的消息
- checkUrlMessage();
-
- // 监听 postMessage 事件(备用方案)
+ // 监听 postMessage 事件
const handlePostMessage = (event: MessageEvent) => {
- console.log("收到 postMessage:", event.data);
-
- // 处理 uni.postMessage 发送的消息格式
if (event.data && typeof event.data === "object") {
- // uni.postMessage 发送的消息格式是 { data: message }
if (event.data.data) {
- handleParentMessage(event.data.data);
+ handleReceivedMessage(event.data.data);
} else {
- // 直接发送的消息格式
- handleParentMessage(event.data);
+ handleReceivedMessage(event.data);
}
}
};
@@ -99,104 +96,31 @@ const IframeDebugPage: React.FC = () => {
document.removeEventListener("UniAppJSBridgeReady", initUniSDK);
window.removeEventListener("message", handlePostMessage);
};
- }, []); // 移除 urlParams 依赖,避免无限循环
-
- // 检查URL参数中的消息
- const checkUrlMessage = () => {
- // 使用兼容的方式解析 URL 参数
- const search = window.location.search.substring(1);
- let messageParam = null;
-
- if (search) {
- const pairs = search.split("&");
- for (const pair of pairs) {
- const [key, value] = pair.split("=");
- if (key === "message" && value) {
- messageParam = decodeURIComponent(value);
- break;
- }
- }
- }
-
- if (messageParam) {
- try {
- const message = JSON.parse(messageParam);
- handleParentMessage(message);
- // 清除URL参数
- const newUrl = window.location.pathname;
- window.history.replaceState({}, "", newUrl);
- } catch (e) {
- console.error("解析URL消息失败:", e);
- }
- }
- };
-
- // 移除 localStorage 相关代码,使用 postMessage 通信
-
- // 接收 App 发送的消息(需与 App 端 evalJS 调用的函数名一致)
- const receiveFromApp = (data: any) => {
- console.log("web-view 收到 App 消息:", data);
- handleParentMessage(data);
- };
-
- // 将函数挂载到全局,供 App 端调用
- useEffect(() => {
- (window as any).receiveFromApp = receiveFromApp;
-
- return () => {
- delete (window as any).receiveFromApp;
- };
}, []);
- // 接收 App 发送的消息
- const handleParentMessage = (message: Message) => {
- // 生成消息的唯一标识,用于防重复处理
- const messageKey = `${message.id}-${message.timestamp}-${JSON.stringify(message.data)}`;
-
- // 检查是否已经处理过这个消息
- if (processedMessages.has(messageKey)) {
- console.log("消息已处理过,跳过:", message);
- return;
- }
-
- // 添加到已处理集合
- processedMessages.add(messageKey);
-
- console.log("web-view 收到 App 消息:", message);
- const messageText = `[${new Date().toLocaleTimeString()}] 收到: ${JSON.stringify(message)}`;
+ // 处理接收到的消息
+ const handleReceivedMessage = (message: Message) => {
+ const messageText = `[${new Date().toLocaleTimeString()}] 收到: ${message}`;
setReceivedMessages(prev => [...prev, messageText]);
-
- // 根据消息类型进行不同处理
- if (message.type === "command") {
- if (message.data?.action === "update") {
- // 更新页面内容
- console.log("执行更新操作:", message.data.content);
- }
- } else if (message.type === "fromApp") {
- console.log("收到 App 消息:", message.data?.content);
- }
};
// 向 App 发送消息
const sendMessageToParent = (message: Message) => {
- console.log("web-view 发送消息到 App:", message);
-
- // 通过 uni.postMessage 发送消息(数据必须放在 data 字段中)
if (window.uni && window.uni.postMessage) {
try {
window.uni.postMessage({
data: message,
});
- console.log("通过 uni.postMessage 发送消息到 App:", message);
+ console.log("发送消息到 App:", message);
} catch (e) {
- console.error("uni.postMessage 失败:", e);
+ console.error("发送失败:", e);
}
} else {
- console.error("uni 对象不存在,无法发送消息");
+ console.error("无法发送消息");
}
};
- // 向 App 发送消息
+ // 发送自定义消息到 App
const sendCustomMessage = () => {
if (!inputMessage.trim()) return;
@@ -307,32 +231,9 @@ const IframeDebugPage: React.FC = () => {
页面URL: {window.location.href}
-
- User Agent: {navigator.userAgent}
-
-
- 窗口大小: {window.innerWidth} x {window.innerHeight}
-
消息ID: {messageId}
-
- {/* URL 参数显示区域 */}
-
-
URL 参数
- {Object.keys(urlParams).length === 0 ? (
-
暂无 URL 参数
- ) : (
-
- {Object.entries(urlParams).map(([key, value]) => (
-
- {key}:
- {value}
-
- ))}
-
- )}
-
);