You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

DevTools可调用g.worldConfig.getWorldName(),Tampermonkey调用报错求助

解决Tampermonkey脚本调用g.worldConfig.getWorldName()报错的问题

问题核心

DevTools中调用正常但Tampermonkey脚本报错TypeError: Cannot read properties of null (reading 'worldname'),本质是两个环境的执行时机差异+私有字段的上下文绑定问题:

  • Tampermonkey脚本可能在页面完成g.worldConfig私有字段_config初始化前就执行了
  • 直接调用原型方法时this上下文绑定错误,导致_classPrivateFieldGet无法读取正确的私有值

可行解决方案

1. 调整脚本执行时机

确保脚本在页面完全加载、g.worldConfig初始化完成后运行:
在Tampermonkey脚本头部添加:

// @run-at document-idle

如果还是存在时机问题,用定时器监听状态直到可用:

function getWorldNameSafely() {
  if (g?.worldConfig) {
    try {
      const name = g.worldConfig.getWorldName();
      if (name) return name;
    } catch (e) {}
  }
  setTimeout(getWorldNameSafely, 100);
}

getWorldNameSafely();

2. 修复this绑定

直接调用原型方法时,必须绑定g.worldConfig作为上下文:

const getWorldNameFn = g.worldConfig.__proto__.getWorldName;
const worldName = getWorldNameFn.call(g.worldConfig);

3. 绕过私有字段直接取值

既然getWorldName本质是读取私有字段里的worldname,可以直接定位该值:
先在DevTools执行Object.getOwnPropertySymbols(g.worldConfig),找到对应_config的符号(比如Symbol(#config)),再在脚本中:

const configSymbol = Object.getOwnPropertySymbols(g.worldConfig).find(sym => sym.description === '#config');
const worldName = g.worldConfig[configSymbol]?.worldname;

内容的提问来源于stack exchange,提问作者johnas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.30 11:59:59