|
|

| 窗口程序集名 | 保 留 | 保 留 | 备 注 | | 窗口程序集_启动窗口 | | | | 变量名 | 类 型 | 数组 | 备 注 | | 显示器文本 | 文本型 | |
网页. 创建组件 (_启动窗口. 取窗口句柄 ()) 网页. 禁止缩放 (真)网页. 禁用默认纵向滚动条 ()网页. 禁用默认横向滚动条 ()网页. 禁用默认菜单 ()网页. 加载HTML ( #计算器UI交互 )网页. 绑定JS回调 (&按钮事件 )显示器文本 = “0”| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | MSG | 文本型 | | | | 字符组 | 文本型 | | 0 |
MSG = 取Json文本 (消息, “msg”, ) 判断 (取Json文本 (消息, “type”, ) = “btnclick”) 判断 (MSG = “0”)  如果真 (显示器文本 ≠ “0”)   显示器文本 = 显示器文本 + “0”    判断 (MSG = “1”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “1” 判断 (MSG = “2”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “2” 判断 (MSG = “3”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “3” 判断 (MSG = “4”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “4” 判断 (MSG = “5”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “5” 判断 (MSG = “6”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “6” 判断 (MSG = “7”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “7” 判断 (MSG = “8”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “8” 判断 (MSG = “9”)  如果真 (显示器文本 = “0”)   显示器文本 = “” 显示器文本 = 显示器文本 + “9” 判断 (MSG = “+”)  如果真 (取文本右边 (显示器文本, 1 ) ≠ “+” 且 取文本右边 (显示器文本, 1 ) ≠ “-” 且 取文本右边 (显示器文本, 1 ) ≠ “×” 且 取文本右边 (显示器文本, 1 ) ≠ “÷”)   如果真 (取文本右边 (显示器文本, 1 ) = “.”)    显示器文本 = 取文本左边 (显示器文本, 取文本长度 (显示器文本 ) - 1 )       显示器文本 = 显示器文本 + “+”    判断 (MSG = “-”)  如果真 (取文本右边 (显示器文本, 1 ) ≠ “+” 且 取文本右边 (显示器文本, 1 ) ≠ “-” 且 取文本右边 (显示器文本, 1 ) ≠ “×” 且 取文本右边 (显示器文本, 1 ) ≠ “÷”)   如果真 (取文本右边 (显示器文本, 1 ) = “.”)    显示器文本 = 取文本左边 (显示器文本, 取文本长度 (显示器文本 ) - 1 )       显示器文本 = 显示器文本 + “-”    判断 (MSG = “*”)  如果真 (取文本右边 (显示器文本, 1 ) ≠ “+” 且 取文本右边 (显示器文本, 1 ) ≠ “-” 且 取文本右边 (显示器文本, 1 ) ≠ “×” 且 取文本右边 (显示器文本, 1 ) ≠ “÷”)   如果真 (取文本右边 (显示器文本, 1 ) = “.”)    显示器文本 = 取文本左边 (显示器文本, 取文本长度 (显示器文本 ) - 1 )       显示器文本 = 显示器文本 + “×”    判断 (MSG = “/”)  如果真 (取文本右边 (显示器文本, 1 ) ≠ “+” 且 取文本右边 (显示器文本, 1 ) ≠ “-” 且 取文本右边 (显示器文本, 1 ) ≠ “×” 且 取文本右边 (显示器文本, 1 ) ≠ “÷”)   如果真 (取文本右边 (显示器文本, 1 ) = “.”)    显示器文本 = 取文本左边 (显示器文本, 取文本长度 (显示器文本 ) - 1 )       显示器文本 = 显示器文本 + “÷”    判断 (MSG = “=”)   计算 () 判断 (MSG = “AC”)  显示器文本 = “0” 判断 (MSG = “BC”)  显示器文本 = 取文本左边 (显示器文本, 取文本长度 (显示器文本 ) - 1 )  如果真 (显示器文本 = “”)   显示器文本 = “0”    判断 (MSG = “CE”) 取符号集 (显示器文本, 字符组, , , , , 假)  如果 (取数组成员数 (字符组 ) > 1 )  删除成员 (字符组, 取数组成员数 (字符组 ), )   显示器文本 = 合并文本数组 (字符组, “”)   显示器文本 = “0”    判断 (MSG = “.”)  如果真 (是否可加小数点 ())    显示器文本 = 显示器文本 + “.”       网页.调用JS函数 (“setScreenText('” + 显示器文本 + “');”) 判断 (取Json文本 (消息, “type”, ) = “getScreenText”)  显示器文本 = MSG    | 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 字符组 | 文本型 | | 0 | | IDX | 整数型 | | | 取符号集 (显示器文本, 字符组, , , , , 假)IDX = -1 判断循环首 (取数组成员数 (字符组 ) > 1 ) IDX = 找乘号 (字符组 ) 如果真 (IDX ≠ -1 )  字符组 [IDX ] = 到文本 (到数值 (字符组 [IDX - 1 ]) × 到数值 (字符组 [IDX + 1 ]))  删除成员 (字符组, IDX + 1, ) 删除成员 (字符组, IDX - 1, ) 到循环尾 () IDX = 找除号 (字符组) 如果真 (IDX ≠ -1 )  字符组 [IDX ] = 到文本 (到数值 (字符组 [IDX - 1 ]) ÷ 到数值 (字符组 [IDX + 1 ]))  删除成员 (字符组, IDX + 1, ) 删除成员 (字符组, IDX - 1, ) 到循环尾 () IDX = 找加号 (字符组) 如果真 (IDX ≠ -1 )  字符组 [IDX ] = 到文本 (到数值 (字符组 [IDX - 1 ]) + 到数值 (字符组 [IDX + 1 ]))  删除成员 (字符组, IDX + 1, ) 删除成员 (字符组, IDX - 1, ) 到循环尾 () IDX = 找减号 (字符组) 如果真 (IDX ≠ -1 )  字符组 [IDX ] = 到文本 (到数值 (字符组 [IDX - 1 ]) - 到数值 (字符组 [IDX + 1 ]))  删除成员 (字符组, IDX + 1, ) 删除成员 (字符组, IDX - 1, ) 到循环尾 ()  判断循环尾 ()显示器文本 = 字符组 [1 ] 计次循环首 (取数组成员数 (字符组 ), I ) 如果真 (字符组 [I ] = “×”) 返回 (I )  计次循环尾 ()返回 (-1 ) 计次循环首 (取数组成员数 (字符组 ), I ) 如果真 (字符组 [I ] = “÷”) 返回 (I )  计次循环尾 ()返回 (-1 ) 计次循环首 (取数组成员数 (字符组 ), I ) 如果真 (字符组 [I ] = “+”) 返回 (I )  计次循环尾 ()返回 (-1 ) 计次循环首 (取数组成员数 (字符组 ), I ) 如果真 (字符组 [I ] = “-”) 返回 (I )  计次循环尾 ()返回 (-1 )|
| 合并文本数组 | 文本型 | | |
| 待合并的数组 | 文本型 | | | | 合并符号 | 文本型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 合并符 | 文本型 | | | | 合并文本 | 文本型 | | | | I | 整数型 | | |
如果 (是否为空 (合并符号 ))  合并符 = “,” 合并符 = 合并符号 计次循环首 (取数组成员数 (待合并的数组 ), I ) 如果 (合并文本 = “”) 合并文本 = 待合并的数组 [I ] 合并文本 = 合并文本 + 合并符 + 待合并的数组 [I ]    计次循环尾 ()返回 (合并文本 )| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 字符组 | 文本型 | | 0 | | 判断目标 | 文本型 | | | 取符号集 (显示器文本, 字符组, , , , , 假)判断目标 = 字符组 [取数组成员数 (字符组 )] 如果真 (寻找文本 (判断目标, “.”, , 假) = -1 且 取文本右边 (显示器文本, 1 ) ≠ “+” 且 取文本右边 (显示器文本, 1 ) ≠ “-” 且 取文本右边 (显示器文本, 1 ) ≠ “×” 且 取文本右边 (显示器文本, 1 ) ≠ “÷”) 返回 (真)返回 (假)|
| 取符号集 | 长整数型 | | |
| 代码 | 文本型 | | | | 储存符号集的变量 | 文本型 | | | | 符号表 | 文本型 | | | | 左字符串界定符 | 文本型 | | | | 右字符串界定符 | 文本型 | | | | 行注释符号 | 文本型 | | | | 保留换行 | 逻辑型 | | | |
| 变量名 | 类 型 | 静态 | 数组 | 备 注 | | 代码行 | 文本型 | | 0 | | 行 | 文本型 | | 0 | | 字符串拼接 | 逻辑型 | | | | 字符串表 | 文本型 | | 0 | | J | 整数型 | | | | I | 整数型 | | | | 暂存 | 文本型 | | | | 跳过 | 逻辑型 | | | | K | 整数型 | | | | 连续跳 | 逻辑型 | | | | 字符串索引 | 整数型 | | | 清除数组 (储存符号集的变量 ) 如果 (是否为空 (符号表 ))  符号表 = { “+”, “-”, “×”, “÷”, “,”, “=”, “==”, “!=”, “<”, “>”, “<=”, “>=”, “{”, “}”, “(”, “)”, “[”, “]”, “<<”, “>>”, “;”, “@#” } 加入成员 (符号表, “@#”) 如果真 (是否为空 (左字符串界定符 ))  左字符串界定符 = #引号 如果真 (是否为空 (右字符串界定符 ))  右字符串界定符 = #引号 如果真 (是否为空 (行注释符号 ))  行注释符号 = “//”代码行 = 分|
| eWebView2 | (未知支持库) | | EJson | (未知支持库) |
[JavaScript] 纯文本查看 复制代码 <!DOCTYPE html>
<html lang="zh-CN">
<head>
<meta charset="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>iOS 计算器</title>
<style>
* {
margin: 0;
padding: 0;
box-sizing: border-box;
font-family: -apple-system, BlinkMacSystemFont, "Segoe UI", Roboto, sans-serif;
}
body {
min-height: 100vh;
background: linear-gradient(135deg, #2c2c34, #121217);
display: flex;
justify-content: center;
align-items: center;
}
.calculator-window {
width: 320px;
background: rgba(40, 40, 48, 0.9);
backdrop-filter: blur(18px);
-webkit-backdrop-filter: blur(18px);
border-radius: 0;
overflow: hidden;
box-shadow: 0 20px 60px rgba(0,0,0,0.5);
border: 1px solid rgba(255,255,255,0.1);
}
.display-area {
padding: 24px 20px 12px;
width: 100%;
height: 90px;
display: flex;
justify-content: flex-end;
align-items: flex-end;
overflow: hidden;
}
.result-text {
color: #ffffff;
font-size: 48px;
font-weight: 300;
white-space: nowrap;
overflow: hidden;
text-overflow: clip;
line-height: 1;
}
.keys-wrap {
padding: 10px;
display: grid;
grid-template-columns: repeat(4, 1fr);
gap: 10px;
}
button.key {
height: 64px;
border-radius: 0;
border: none;
font-size: 24px;
cursor: pointer;
transition: filter 0.15s ease;
}
button.key:active {
filter: brightness(1.3);
}
.key-gray {
background: #a5a5a5;
color: #000;
}
.key-orange {
background: #ff9f0a;
color: #fff;
}
.key-dark {
background: #333336;
color: #fff;
}
.key-zero {
grid-column: span 2;
border-radius: 0;
text-align: left;
padding-left: 26px;
}
</style>
</head>
<body>
<div class="calculator-window">
<div class="display-area">
<div class="result-text">0</div>
</div>
<div class="keys-wrap">
<button class="key key-gray" data-val="AC">AC</button>
<button class="key key-gray" data-val="CE">CE</button>
<button class="key key-gray" data-val="BC">BC</button>
<button class="key key-orange" data-val="/">÷</button>
<button class="key key-dark" data-val="7">7</button>
<button class="key key-dark" data-val="8">8</button>
<button class="key key-dark" data-val="9">9</button>
<button class="key key-orange" data-val="*">×</button>
<button class="key key-dark" data-val="4">4</button>
<button class="key key-dark" data-val="5">5</button>
<button class="key key-dark" data-val="6">6</button>
<button class="key key-orange" data-val="-">-</button>
<button class="key key-dark" data-val="1">1</button>
<button class="key key-dark" data-val="2">2</button>
<button class="key key-dark" data-val="3">3</button>
<button class="key key-orange" data-val="+">+</button>
<button class="key key-dark key-zero" data-val="0">0</button>
<button class="key key-dark" data-val=".">.</button>
<button class="key key-orange" data-val="=">=</button>
</div>
</div>
<script>
function erymsg(msg) {
if (window.chrome && window.chrome.webview) {
const json = {
type: 'btnclick',
msg: msg
}
window.chrome.webview.postMessage(JSON.stringify(json));
}
}
document.addEventListener('DOMContentLoaded', function () {
const keys = document.querySelectorAll('.key');
keys.forEach(btn => {
btn.addEventListener('click', function () {
const val = this.dataset.val;
erymsg(val);
});
});
autoFitFontSize();
});
function setScreenText(text) {
const resultText = document.querySelector('.result-text');
resultText.textContent = text;
autoFitFontSize();
}
function getScreenText(){
const resultText = document.querySelector('.result-text');
const json = {
type: 'getScreenText',
msg: resultText.textContent
}
window.chrome.webview.postMessage(JSON.stringify(json));
}
function autoFitFontSize() {
const textEl = document.querySelector('.result-text');
const wrapEl = document.querySelector('.display-area');
const MAX_FONT = 48;
const MIN_FONT = 12;
const availableWidth = wrapEl.clientWidth - 20 * 2 - 10;
let low = MIN_FONT;
let high = MAX_FONT;
let bestFit = MAX_FONT;
while (high - low > 0.1) {
const mid = (low + high) / 2;
textEl.style.fontSize = mid + 'px';
if (textEl.scrollWidth <= availableWidth) {
bestFit = mid;
low = mid;
} else {
high = mid;
}
}
textEl.style.fontSize = bestFit + 'px';
}
</script>
</body>
</html>
|
|