如何在Script Lab中使用Fetch调用API?解决Request未定义错误
这问题我之前帮人排查过,核心原因是你当前Script Lab运行的Office环境可能还在使用IE11的渲染引擎——而IE11本身并不支持现代浏览器的Fetch API(包括Headers、Request和fetch函数),所以才会抛出ReferenceError。下面是几种可行的解决方法:
解决步骤
1. 引入Fetch API Polyfill(最推荐)
最快捷的方法是给Script Lab添加polyfill脚本,补全IE11缺失的现代API:
- 打开你的Script Lab项目,切换到HTML标签页
- 在
<head>标签内添加以下代码(确保放在你自定义脚本的前面):
<script src="https://cdn.jsdelivr.net/npm/whatwg-fetch@3.6.2/dist/fetch.umd.min.js"></script>
这个polyfill会自动为当前环境补全fetch、Headers和Request这些对象,完全不需要修改你原有的代码逻辑,添加后重新运行项目即可。
2. 切换到Chromium引擎(适合新版Office)
如果你用的是Office 2019或365的最新版本,其实可以直接切换到现代Chromium-based的渲染引擎,原生支持Fetch API:
- 打开Office应用(比如Excel/Word),依次点击文件 > 选项 > 信任中心 > 信任中心设置 > 受信任的加载项目录
- 找到并勾选"使用Microsoft Edge WebView2运行加载项"(不同版本的路径可能略有差异)
切换完成后,Script Lab会使用和Chrome一致的现代引擎,后续就不会再出现这类API未定义的问题了。
3. 替代方案:改用XMLHttpRequest(不推荐)
如果不想依赖polyfill,也可以把fetch相关代码替换成IE11原生支持的XMLHttpRequest,但需要重写部分逻辑,示例如下:
// 替代fetch GET请求的示例 const xhr = new XMLHttpRequest(); xhr.open('GET', '你的目标API地址'); xhr.setRequestHeader('Content-Type', 'application/json'); xhr.onload = function() { if (xhr.status >= 200 && xhr.status < 300) { const data = JSON.parse(xhr.responseText); // 处理返回的数据 } else { // 处理请求错误 } }; xhr.onerror = function() { // 处理网络连接错误 }; xhr.send();
不过这个方法需要改动原有代码结构,不如polyfill省心,只推荐作为临时应急方案。
内容的提问来源于stack exchange,提问作者A.Fuentes
相关产品推荐
相关产品推荐

