无法访问 HTML 元素上的 __reactInternalInstance$

Can not access __reactInternalInstance$ on HTML Element

提问人:Siro 提问时间:8/2/2023 更新时间:8/2/2023 访问量:31

问:

我正在创建一个 Chrome 扩展程序,我需要从 HTML 元素获取 React 实例。当我在玩网站并测试这个函数以从 HTML 元素获取 React 实例时,一切都按我的预期工作。

function getReactInstance(element: HTMLElement | undefined): Record<string, any> | undefined {
    if (element === undefined) {
       return;
    }

    for (const key in element) {
        if (key.startsWith('__reactInternalInstance$')) {
            return (element as any)[key] as any;
        }
    }
}

但是当我尝试使用相同的 HTML 元素调用相同的函数时,它返回了 .undefined

我做了更多的调试,发现如果我尝试调用 HTML 元素,我会得到 2 个不同的结果。Object.getOwnPropertyNames

从 Chrome 扩展程序脚本调用:

[]

从网站上的开发者控制台调用:

['__reactInternalInstance$n8lnk6b117', '__reactEventHandlers$n8lnk6b117']

我的问题是:如何从 Chrome 扩展程序内容脚本访问对象的所有属性?

reactjs 打字稿 dom

评论


答:

0赞 Siro 8/2/2023 #1

在互联网上进行了一些清理之后,我创建了一个模糊的图片,说明可能是什么潜在的问题。我的假设是正确的。问题在于 Chrome 扩展程序的内容脚本在孤立的世界中运行。更改为包含设置以解决我的所有问题。manifest.jsonworld"MAIN"

{
  ...
  "content_scripts": [{
      ...
      "world": "MAIN"
  }]
}