Skip to content
iPlugin

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