coze平台js节点运行于裁剪版v8沙箱,无document/window/fetch等api,仅支持get_input()和set_output()两个io接口及es2021特性,禁用eval、new function、定时器及crypto api,需用正则提取、手写sha256或括号计数法校验json。
☞☞☞AI 智能聊天, 问答助手, AI 智能搜索, 多模态理解力帮你轻松跨越从0到1的创作门槛☜☜☜

你想在扣子(Coze)平台为工作流开发一个具备真实DOM操作、动态脚本加载和跨域资源探测能力的JavaScript节点,但发现默认JS环境既不提供document对象,也无法执行eval或new Function——这说明你正面对的是一个严格受限的沙箱,而非浏览器完整运行时。
确认JS节点真实运行环境
进入工作流编辑页 → 点击「+」添加节点 → 选择「代码」类型 → 在右侧面板语言下拉菜单中【必须手动选中JavaScript】;若留空或误选Python,后续所有JS语法将直接报错且无明确提示。该JS环境基于V8引擎裁剪版,仅暴露全局作用域中有限API,document、window、location、fetch、XMLHttpRequest等全部不可用,连console.log都可能被静默丢弃。
验证方式:在代码框内写set_output('test', typeof document)并运行,输出必为"undefined"。
可用API与安全边界清单
平台注入的唯一合法IO接口只有两个:get_input()和set_output()。前者接收上游字段值(如get_input('url')),后者返回结果(如set_output('valid', true))。其余一切需靠标准ECMAScript 2021特性实现:
- 支持:箭头函数、解构赋值、Promise、JSON.parse/stringify、正则、Array/Map/Set方法
- 禁止:
eval()、new Function()、setTimeout、setInterval、atob/btoa(Base64编解码需手写)、任何原型污染操作
注意:尝试访问Function.constructor或Object.prototype.constructor会触发沙箱熔断机制,节点直接失败且无日志。
方法一:纯前端式字符串清洗与结构化提取
适用于从用户输入中提取邮箱、手机号、日期等结构化字段,无需网络或DOM。
第一步:定义主函数并获取输入
function main() { const raw = get_input('text');
第二步:用正则精准捕获目标片段(避免使用.matchAll(),部分引擎未启用)
const emailRegex = /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}/g; const emails = raw.match(emailRegex) || [];
第三步:清洗并去重,用Set比filter更可靠
const uniqueEmails = [...new Set(emails.map(e => e.trim().toLowerCase()))]; set_output('emails', uniqueEmails); }
第四步:必须显式调用main(),否则脚本静默退出
main();
Java JDK 25 来自 OpenJDK 官方归档,版本为 JDK 25,本条下载地址已指向官方 Windows x64 zip 安装包直链,适合调试旧项目或兼容旧版 Java 运行环境。
方法二:模拟HTTP请求签名生成(无网络,仅计算)
当需要对接外部API但插件未开启HTTP时,可提前生成签名串供下游节点使用。
方法一:HMAC-SHA256基础签名(需手写SHA256逻辑)
直接粘贴已验证的轻量SHA256实现(约30行),传入get_input('secret')与get_input('payload'),输出set_output('signature', hexStr);【严禁调用任何crypto或subtle API,它们不存在】。
方法二:时间戳+随机数拼接签名(低安全要求场景)
const ts = Date.now().toString(); const rand = Math.random().toString(36).substr(2, 8); set_output('nonce', ts + rand);
这一步操作起来很简单,直接把生成逻辑写进main函数里就行。
方法三:JSON Schema校验与错误定位
用于拦截格式错误的JSON输入,返回具体字段名和错误类型,替代大模型兜底解析。
① 获取原始文本输入
const input = get_input('json_text');
② 尝试解析并捕获SyntaxError位置
原生JSON.parse无法返回错误列号,需手动扫描:逐字符遍历,用括号计数器检测不平衡点,当计数器负值时记录当前索引。此法能定位到首个非法字符位置,比try-catch更精确。
③ 构造结构化错误输出
set_output('valid', false); set_output('error_at', index); set_output('error_char', input[index]);
④ 若解析成功,仍需校验schema——用硬编码规则判断是否含必需字段、类型是否匹配,不依赖第三方库。
Java免费学习笔记:立即使用
解锁 Java 大师之旅:从入门到精通的终极指南










