fix(aibox/frontend): Batch M 波次3 前端功能修复(F1/F2/F3/F4/F6)
- F1: entry/frontend 清空按钮先 cloneNode 缓存 welcome-message 再清空,修 TypeError 中断 - F2: 三页面手动断开清除/作废重连定时器,杜绝连接复活(entry 新增 reconnectTimer 句柄) - F3: 三页面连接前关闭 CONNECTING 中旧连接,防孤儿连接/双后端会话 - F4: 6 个 CDN CSS link 补 SRI integrity+crossorigin(sha384 实测计算) - F6: frontend 重连文案与 3000*N 实际延迟对齐 三页面内联脚本 node --check 通过;测试 493 passed/4 failed(既有平台项)/1 skipped 零回归
This commit is contained in:
1 parent
9064750f33
commit
9db2bc112d
4 files changed
+55
-20
No files matched your search
+16
-9
@@ -4,8 +4,8 @@
|
||||
<meta charset="UTF-8">
|
||||
<meta name="viewport" content="width=device-width, initial-scale=1.0">
|
||||
<title>AI智能助手 - WebSocket直连</title>
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/6.0.0/css/all.min.css" integrity="sha384-3B6NwesSXE7YJlcLI9RpRqGf2p/EgVH8BgoKTaUrmKNDkHPStTQ3EyoYjCGXaOTS" crossorigin="anonymous">
|
||||
<link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/styles/github-dark.min.css" integrity="sha384-wH75j6z1lH97ZOpMOInqhgKzFkAInZPPSPlZpYKYTOqsaizPvhQZmAtLcPKXpLyH" crossorigin="anonymous">
|
||||
<!-- J13(审计 2026-08-19):CDN 脚本补 SRI integrity,防供应链劫持 -->
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/marked/9.1.6/marked.min.js" integrity="sha384-odPBjvtXVM/5hOYIr3A1dB+flh0c3wAT3bSesIOqEGmyUA4JoKf/YTWy0XKOYAY7" crossorigin="anonymous"></script>
|
||||
<script src="https://cdnjs.cloudflare.com/ajax/libs/highlight.js/11.8.0/highlight.min.js" integrity="sha384-g4mRvs7AO0/Ol5LxcGyz4Doe21pVhGNnC3EQw5shw+z+aXDN86HqUdwXWO+Gz2zI" crossorigin="anonymous"></script>
|
||||
@@ -1424,9 +1424,12 @@
|
||||
|
||||
if (!manualDisconnect && reconnectAttempts < MAX_RECONNECT_ATTEMPTS) {
|
||||
reconnectAttempts++;
|
||||
showSystemMessage(`⚠️ 连接断开,${reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS} 秒后重试...`);
|
||||
// F6(审计 2026-08-20):实际延迟为 3000*N ms,文案与此对齐
|
||||
showSystemMessage(`⚠️ 连接断开,${3 * reconnectAttempts} 秒后重试(${reconnectAttempts}/${MAX_RECONNECT_ATTEMPTS})...`);
|
||||
setTimeout(() => {
|
||||
if (!ws || ws.readyState !== WebSocket.OPEN) {
|
||||
// F2(审计 2026-08-20):闭包到期时再判 manualDisconnect,
|
||||
// 防止手动断开后已排程定时器把连接"复活"
|
||||
if (!manualDisconnect && (!ws || ws.readyState !== WebSocket.OPEN)) {
|
||||
console.log('尝试重连...');
|
||||
ws = connectWebSocket();
|
||||
}
|
||||
@@ -1596,7 +1599,8 @@
|
||||
|
||||
// 事件绑定
|
||||
document.getElementById('connect-btn').addEventListener('click', function() {
|
||||
if (ws && ws.readyState === WebSocket.OPEN) {
|
||||
// F3(审计 2026-08-20):CONNECTING 中的旧连接也要关闭,否则重复点击产生孤儿连接/双后端会话
|
||||
if (ws && ws.readyState !== WebSocket.CLOSED) {
|
||||
ws.close();
|
||||
}
|
||||
reconnectAttempts = 0;
|
||||
@@ -1639,11 +1643,14 @@
|
||||
|
||||
document.getElementById('clear-chat-btn').addEventListener('click', function() {
|
||||
const container = document.getElementById('messages-container');
|
||||
// F1(审计 2026-08-20):welcome-message 在 container 内,
|
||||
// 必须先 cloneNode 缓存再清空,否则 querySelector 返回 null 抛 TypeError,
|
||||
// 且后续 clearAllStreamingMessages/计数清零全部中断不执行
|
||||
const welcomeEl = document.querySelector('.welcome-message');
|
||||
const welcomeHtml = welcomeEl ? welcomeEl.cloneNode(true) : null;
|
||||
container.innerHTML = '';
|
||||
|
||||
const welcomeHtml = document.querySelector('.welcome-message').cloneNode(true);
|
||||
container.appendChild(welcomeHtml);
|
||||
|
||||
if (welcomeHtml) container.appendChild(welcomeHtml);
|
||||
|
||||
clearAllStreamingMessages();
|
||||
messageCount = 0;
|
||||
toolCallCount = 0;
|
||||
|
||||
Reference in new issue
Block a user