JavaScript 与函数范围
查询 JS 根语句、节点绑定、内置函数、Utils 与脚本共享范围。
语句
| 语句 | 别名 | 参数、返回或可见效果 |
|---|---|---|
javascript '1 + 2' | $、js | 必填一段原样脚本文字,返回求值结果;示例得到数字 3 |
javascript_debug '1 + 2' | — | 与普通 JavaScript 根语句执行相同逻辑,没有额外断点、变量跟踪或专用调试输出 |
javascript_now '1 + 2' | — | 输出 DEBUG_NOW 日志后取即时结果;无法立即取得时返回 <TIMEOUT> |
这里的脚本参数是一个完整文字参数,不是先执行的 Kether 表达式。简单脚本加引号;较长脚本放在 JAVASCRIPT 节点的多行 value 中:
nodes:
next_count_text:
type: JAVASCRIPT
value: |-
var count = Number(session.getVariable("clicks") || 0);
String(count + 1);此节点返回下一次计数的文字,不会替你写回 clicks。需要执行 Kether 并更新会话时,用下面的 kether / shell,或在外层用 ctx 明确赋值。
使用插件提供的 JavaScript 支持,不需要为了本页另装同名脚本插件。脚本必须是当前 JavaScript 引擎支持的语法,不假定浏览器 DOM、Node.js 的 require / fetch、任意新式语法或顶层 return 可用。
可见变量
| 入口 | 可直接读取的内容 |
|---|---|
js / $ / javascript 及调试入口 | 当前 Kether 上下文中的普通变量,不直接开放系统上下文对象;有会话时额外提供 session、player |
JAVASCRIPT 节点 | session、player、本次 with 的 invokeArgs;不自动把所有会话键提升成 JavaScript 顶层名字 |
| 所有这些脚本 | server、Utils 与下表的辅助函数 |
节点内要读取会话键,明确调用 session.getVariable("键名")。invokeArgs 中的每项是文字;需要数字时自己转换。节点的结果会转成文字,而 js 根语句的结果可保留数值、布尔值等类型。
在已关闭菜单的输入回调中,答案仍可作为普通 Kether 变量传给 js,但不能假定存在活动 session。JavaScript 不是菜单重开后的初始化替代品。
内置函数与工具
| 名称 | 参数与结果 | 适用前提 |
|---|---|---|
parse(text) | 按菜单上下文解析文字并返回 | 有当前会话;没有会话时为 <ERROR: NO SESSION> |
kether(script)(shell(script)) | 执行一段 Kether 并取即时结果文字 | 需要会话;不继承 JS 局部变量,也不等待延迟脚本完成 |
println(value) | 向控制台日志输出 | 只用于输出,不代表给玩家发消息 |
print(value) | 向控制台输出 | 同上 |
Utils.fromURL(url) | 同步读取 URL 内容为文字,失败时返回 <ERROR: ...> | 会等待读取结果;没有这里可配置的超时参数 |
Utils.asJsonElemenet(text) | 解析 JSON 为通用 JSON 元素 | 名字实际拼写为 Elemenet,不是 Element |
Utils.asJsonObject(text) | 解析为 JSON 对象 | 输入必须为对象 |
Utils.asJsonArray(text) | 解析为 JSON 数组 | 输入必须为数组 |
Utils.getPlayer(name) | 按精确名字取得在线玩家,找不到则为空 | 不是离线玩家查询 |
例如在已有菜单的图标动作中:
action: |-
js 'shell("ctx inc clicks by 1")'
icon update更简单的同等效果直接写 ctx inc clicks by 1 icon update 即可;只有确实需要 JS 表达式或 API 时才加入 JavaScript。同步网络读取不因外层返回异步结果对象就变成非阻塞,手动任务的 async 规则见任务。
绑定与函数的作用范围
JavaScript 的绑定环境并不是按玩家、菜单或每次调用完全隔离的。自定义名字与函数可能在后续调用中残留;不把顶层 var、函数定义或未覆盖的绑定当作可靠的个人会话存储。涉及玩家时使用当前调用明确提供的对象,个人状态写 ctx 或 persist,不依赖上一次脚本留下的 player / session。
kether / shell 会建立新的 Kether 求值上下文,不能直接访问 JS 的局部变量;需要传值时明确组织脚本文字或写入会话。它取得的是即时结果,含等待的脚本可能返回 <TIMEOUT>,不能用它实现等待链。
通用 Kether 函数属于其所在脚本,语法与调用规则见 TabooLib Kether 列表。它与 JavaScript 函数不是同一种函数,二者不会自动相互注册。跨菜单共享可配置逻辑使用全局节点,不是新增不存在的菜单 functions 字段。
Last updated on