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

React在SharePoint站点出现'Set is undefined'错误求助

解决IE中SharePoint站点的'Set' is undefined错误

这个问题其实很典型——IE(尤其是IE11及以下版本)不原生支持ES6的Set对象,而你的React项目或者依赖库中用到了这个API,Chrome和Firefox早已兼容ES6特性,所以它们能正常运行,IE却因为识别不了Set报错,进而导致iframe内容加载失败。

下面是几个针对性的解决方案,按优先级推荐:

1. 引入Set的Polyfill(最直接的修复)

Polyfill可以给IE补充缺失的ES6 API实现,让它能识别Set:

  • 如果你的项目用了core-js,在入口文件(比如index.js)顶部添加:
    import 'core-js/es/set';
    
  • 要是用的Create React App,只需在package.json里把浏览器兼容列表加上IE11:
    "browserslist": [
      "ie 11",
      ">0.2%",
      "not dead",
      "not op_mini all"
    ]
    
    重新构建后,CRA会自动注入所需的polyfill。
  • 针对SharePoint场景,也可以在站点的母版页/页面布局中,先加载本地部署的polyfill脚本,再加载你的React打包文件,确保Set在其他脚本执行前就被定义。

2. 确保代码被完整转译为ES5

检查你的Babel/Webpack配置,确认所有ES6语法都被转成IE能识别的ES5:

  • 用@babel/preset-env时,配置目标浏览器包含IE11,比如在.babelrc里:
    {
      "presets": [
        ["@babel/preset-env", {
          "targets": {
            "ie": "11"
          },
          "useBuiltIns": "usage",
          "corejs": 3
        }],
        "@babel/preset-react"
      ]
    }
    
  • 如果有第三方依赖没被转译(比如某些npm包直接发布ES6代码),要在Webpack的module.rules里把这些包加入babel-loader的处理范围,避免遗漏转译。

3. 排查SharePoint的脚本加载顺序

SharePoint站点有时会有脚本加载优先级的问题,确保polyfill脚本在require-951f856e.js之前加载。你可以用IE的开发者工具(F12)查看网络请求顺序,调整脚本在页面中的引入位置,让polyfill先执行。

修复后,刷新IE页面,应该就能看到iframe正常加载,SCRIPT5009错误也会消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.21 07:52:26