2

有没有办法防止生产前端的任何道具/状态变化?

我尝试了以下操作,但它完全禁用了开发工具:

if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === 'object') {
  for (let [ key, value ] of Object.entries(
    window.__REACT_DEVTOOLS_GLOBAL_HOOK__
  )) {
     window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] =
       typeof value === 'function' ? () => {} : null;
  }
}    
4

2 回答 2

3

我在使用 React 16.3 作为 UI 库的 Meteor 应用程序中使用以下代码。

window.__ALLOW_REACT_DEVTOOLS__只是我在从服务器发送的 SSR html 中设置的一个标志,因为这行代码需要排除任何 React 代码,并且process.env在浏览器中可用之前我需要它。在服务器上,我在生产中将该值设置为 false。

<script>
  if (
    !window.__ALLOW_REACT_DEVTOOLS__ &&
    window.__REACT_DEVTOOLS_GLOBAL_HOOK__ &&
    typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === "object"
  ) {
    for (let [key, value] of Object.entries(window.__REACT_DEVTOOLS_GLOBAL_HOOK__)) {
      window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] = typeof value == "function" ? ()=>{} : null;
    }
  }

  delete window.__ALLOW_REACT_DEVTOOLS__;
</script>

完成这项工作的关键是它是在 React 之前加载的。

这将完全禁用 React-Devtools。当您单击 devtools 选项卡时,它只会说'寻找 React...'

于 2018-04-18T21:05:49.187 回答
0

好的,找到了一种方法来防止该功能被注入/参与。

我刚刚将禁用代码更改为:

// 禁用这个项目的 react-dev-tools

 if (typeof window.__REACT_DEVTOOLS_GLOBAL_HOOK__ === "object") {
        for (let [key, value] of Object.entries(window.__REACT_DEVTOOLS_GLOBAL_HOOK__)) {
            window.__REACT_DEVTOOLS_GLOBAL_HOOK__[key] = typeof value == "function" ? ()=>{} : null;
        }
    }
于 2018-09-28T07:47:53.480 回答