chore(jcef): 更新缓存数据库日志文件

- 更新 shared_proto_db/metadata/000003.log 文件内容
- 更新 Site Characteristics Database/00003.log 文件内容
- 添加新的数据库条目和元数据记录
- 保持数据库文件格式的一致性
- 删除Vivid2D的内容
- 重写启动加载界面
This commit is contained in:
2026-01-02 17:12:54 +08:00
parent 75bdca05f2
commit 8de2b0f2fe
261 changed files with 4375 additions and 59810 deletions

View File

@@ -0,0 +1,117 @@
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Real Linux Terminal</title>
<!-- 引入 Xterm.js 的样式 -->
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/xterm@5.3.0/css/xterm.css" />
<style>
body, html {
margin: 0;
padding: 0;
background-color: #000;
overflow: hidden;
height: 100%; /* 确保 html 和 body 占满全屏 */
}
#terminal-container {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div id="terminal-container"></div>
<!-- 引入 Xterm.js 核心库 -->
<script src="https://cdn.jsdelivr.net/npm/xterm@5.3.0/lib/xterm.js"></script>
<!-- 引入自适应插件,让终端随窗口缩放 -->
<script src="https://cdn.jsdelivr.net/npm/xterm-addon-fit@0.8.0/lib/xterm-addon-fit.js"></script>
<script>
// 1. 初始化终端
const term = new Terminal({
cursorBlink: true,
fontSize: 14,
fontFamily: 'Consolas, "Ubuntu Mono", monospace',
theme: {
background: '#1e1e1e',
foreground: '#ffffff'
},
// 增加右键菜单功能:粘贴
allowProposedApi: true
});
const fitAddon = new FitAddon.FitAddon();
term.loadAddon(fitAddon);
term.open(document.getElementById('terminal-container'));
// --- 修复点 1: 自动获取焦点 ---
// 确保用户打开窗口后可以直接输入
term.focus();
// --- 修复点 2: 延迟并可靠地适应窗口大小 ---
// 使用 setTimeout 将 fit() 推迟到下一个事件循环
// 这可以确保在DOM元素完全渲染并获得其最终尺寸后才进行计算
function fitTerminal() {
try {
fitAddon.fit();
// 你还可以在这里将新的尺寸发送给后端 PTY
// term.cols 和 term.rows 包含了新的行列数
} catch (e) {
console.error("Fit addon failed:", e);
}
}
setTimeout(fitTerminal, 1); // 1ms 延迟足以确保渲染完成
// 窗口大小改变时自动调整
window.addEventListener('resize', fitTerminal);
// 2. 监听用户输入 (键盘按键)
term.onData(data => {
if (window.cefQuery) {
window.cefQuery({
request: JSON.stringify({
type: 'terminalInput',
data: data
}),
onSuccess: function() {},
onFailure: function(errorCode, errorMessage) {
console.error("CEF query failed:", errorCode, errorMessage);
}
});
} else {
console.warn("cefQuery is not available. Input ignored.");
}
});
// --- 修复点 3: 使用 TextDecoder 优化解码逻辑 ---
// 这是更现代、更可靠的将字节流解码为UTF-8字符串的方法
const decoder = new TextDecoder('utf-8');
/**
* 供 Java 调用的接口:写入数据到终端
* @param {string} base64Data - Base64 编码的原始字节流字符串
*/
function writeToTerminal(base64Data) {
try {
// 将 Base64 字符串转换为 Uint8Array 字节数组
const binaryString = window.atob(base64Data);
const len = binaryString.length;
const bytes = new Uint8Array(len);
for (let i = 0; i < len; i++) {
bytes[i] = binaryString.charCodeAt(i);
}
// 使用 TextDecoder 解码为字符串并写入终端
term.write(decoder.decode(bytes));
} catch (e) {
console.error("Failed to decode or write Base64 data:", e);
// 可以在终端显示错误信息
term.write("\r\n[Front-end Error: Failed to process data from back-end]\r\n");
}
}
// 初始化通知
term.write('\x1B[1;3;32mConnected to Local Shell via PTY4J...\x1B[0m\r\n');
</script>
</body>
</html>