代码运行器
在浏览器 Worker 里执行 JavaScript:捕获 console 输出、默认 3 秒超时(超时终止 Worker)、显示错误与堆栈,并禁用 fetch / XMLHttpRequest / importScripts 等联网入口。
浏览器本地运行所有计算都在你的浏览器里完成,数据不会离开本机。
代码
代码在独立的 Worker 线程里执行,主线程不用 eval / new Function;超时直接终止整个 Worker,所以死循环也不会卡住页面。
运行结果
还没有输出:点「运行」执行代码,console.log 的内容会出现在这里。
这个工具能做什么
- 临时验证一段 JS 逻辑,不想开终端或 devtools:粘进来点「运行」,结果直接显示在页面上。
- 确认代码在受限环境下的表现:沙箱里 fetch / XMLHttpRequest / importScripts 都被禁用,能提前发现「这段逻辑其实依赖网络」。
- 演示或教学时跑一段会死循环的代码:超时后 Worker 被终止,页面不会跟着卡住。
- 复现一个报错:错误消息与堆栈直接显示出来,不用打开浏览器控制台翻日志。
示例
输入
console.log('求和', [1, 2, 3, 4].reduce((total, value) => total + value, 0));输出
[log] 求和 10 状态:执行完成
日志按收到的顺序逐条追加,对象会被格式化成紧凑 JSON(循环引用标成 [Circular]);超时只是终止 Worker,已经打印的内容会保留。
常见问题
代码在哪里执行?会不会把页面卡死?
在独立的 Web Worker 线程里执行,源码由 Blob 生成后交给 Worker,主线程完全不使用 eval 或 new Function。超时(默认 3 秒)时直接 terminate() 掉整个 Worker,所以 while(true) 这类死循环只会让状态变成「执行超时」,页面依然可操作。
沙箱禁用了哪些能力?
fetch、XMLHttpRequest、importScripts、WebSocket、EventSource 都被替换成「调用即抛错」的函数,因此沙箱内没有任何联网方式;也没有 window / document(Worker 环境本来就没有 DOM)。这是经典 Worker,不支持 import 与顶层 await。需要说明的是:它是一个「防误操作、防卡死」的执行环境,不是安全边界——不要用它运行不可信的第三方代码。
为什么 console.log 的内容能显示出来?
Worker 里的 console 被替换成了自定义实现:每个参数先格式化(字符串原样、数字与布尔转字符串、对象转紧凑 JSON、函数显示名字、Error 显示「名称: 消息」),拼成一行后用 postMessage 发回主线程,主线程再逐条追加显示,并保留 log / info / warn / error / debug 的级别颜色。
超时或出错之后还能看到之前的输出吗?
能。日志是收到一条就追加一条,超时和运行时错误只改变状态并终止 Worker,已经打印的行不会被清掉——排查死循环「卡在哪一步」时这点很有用。点「清空输出」可以手动清掉。
代码会被上传或保存吗?
不会。代码只存在于当前页面的内存里,刷新就没了,页面也不发任何请求;沙箱内部同样发不出请求。
关键词:run javascript onlinejs sandboxcode runnerweb workerconsole capture在线运行 JS代码运行器JS 沙箱JavaScript 在线执行代码片段调试