HTML计算器是纯前端可独立运行的代码片段,双击index.html即可运行,所有逻辑在浏览器内执行,不依赖服务器或后端服务。
HTML计算器和在线工具不是同一类东西——前者是纯前端可独立运行的代码片段,后者是带后端服务、用户体系、数据存储的完整应用。把HTML计算器“塞进”在线工具里,不等于它就变成了在线工具的一部分。
双击一个 index.html 文件就能跑起来,所有逻辑在浏览器里执行:input 读值、parseFloat() 转类型、switch 算四则运算,全程不发任何网络请求。所谓“在线工具”提供的域名、CDN、登录态、历史记录这些,对它来说全是冗余。
localStorage.setItem('history', JSON.stringify(logs)) 就能存上次算过什么,不用连数据库location.hash 传初始表达式(比如 #3+5*2),刷新也不丢状态不是计算器写得不对,而是它被当成“小部件”挂进了大系统里,结果被拖垮:
eval(input.value) 在 CSP 严格的在线工具里直接被禁,报 Refused to evaluate a string as JavaScript 却没 catch,整个功能静默失效onclick="append('5')",但主框架用了 React,JSX 重渲染时把内联事件干掉了,点击没反应innerHTML = result 更新,而父容器是个含 200 行 JSON 的 pre 标签,每次按键都触发全量重排<input> 里,按 = 键实际输进了输入框,而不是触发计算逻辑核心原则:隔离作用域、切断耦合、接管输入流。
立即学习“前端免费学习笔记(深入)”;
iframe src="calc.html" 包一层,CSS/JS 完全不污染主页面,通信只走 postMessage
let currentExpr = ''),别依赖 display.value 实时读取input.blur(),防止键盘输入误入eval:用白名单清洗 + Function('return ' + sanitized)(),既绕过 CSP 又比 eval 安全ontouchstart="" 到每个 <button>,否则 iOS Safari 有 300ms 延迟真正难的不是写出能算 2+2 的 HTML 计算器,而是让它在别人的 React/Vue 框架、CSP 策略、性能监控 SDK 和埋点脚本包围下,依然稳稳地响应每一次点击——这要求你清楚知道哪些行为会触发重排、哪些 API 被策略拦截、哪些变量会被闭包意外持有。