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

Word Add-in使用Promise提示undefined错误,求支持情况及解决方法

Word Add-in中Promise报错"promise is undefined"的解决方案

首先明确:Word Add-in完全支持Promise,你遇到的问题大概率是环境不支持原生Promise,或者脚本加载顺序/冲突导致的。下面一步步帮你排查解决:

1. 先解决重复脚本的冲突问题

你引用了3个不同版本的jQuery(1.9.1、2.1.4、3.4.1),多个版本的jQuery会覆盖全局变量,导致各种不可预知的错误,甚至可能影响Promise的正常运行。

解决方法:只保留一个最新的jQuery版本,比如移除旧的1.9.1和2.1.4,只保留3.4.1的引用。

2. 处理IE11环境的Promise支持缺失

Word桌面版(Windows平台)的宿主内核是IE11,而IE11原生不支持ES6的Promise对象,这是导致"promise is undefined"最常见的原因。

解决方法:引入Promise polyfill来兼容IE11,推荐使用es6-promise。你需要在所有脚本(包括Office.js)之前加载polyfill:

<!-- 先加载Promise polyfill,兼容IE11 -->
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.min.js"></script>
<script src="https://cdn.jsdelivr.net/npm/es6-promise@4/dist/es6-promise.auto.min.js"></script>

<!-- 只保留一个jQuery版本 -->
<script src="https://code.jquery.com/jquery-3.4.1.js" integrity="sha256-WpOohJOqMqqyKL9FccASB9O0KwACQJpFTUBLTYOVvVU=" crossorigin="anonymous"></script>

<!-- 加载Office.js -->
<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js" type="text/javascript"></script>

<!-- 其他自定义脚本 -->
<script src="Scripts/FabricUI/MessageBanner.js" type="text/javascript"></script>

3. 确保代码在Office初始化完成后执行

Office.js需要完成初始化才能保证环境稳定,你的Promise代码应该放在Office.initialize回调中执行,避免在环境未准备好时调用Promise:

Office.initialize = function(reason) {
    // 在这里定义和使用Promise函数
    function getBase64(file) {
        return new Promise(function (resolve, reject) {
            var reader = new FileReader();
            reader.onload = function () {
                resolve(reader.result);
            };
            reader.onerror = reject;
            reader.readAsDataURL(file);
        });
    }

    // 示例调用
    document.querySelector('#file-upload').addEventListener('change', function(e) {
        const selectedFile = e.target.files[0];
        getBase64(selectedFile)
            .then(base64String => {
                console.log('文件Base64编码:', base64String);
                // 这里可以继续处理Word API的逻辑
            })
            .catch(error => {
                console.error('转换失败:', error);
            });
    });
};

补充说明

  • Office.js本身的API(比如Word.run())从v1.1开始就支持Promise链式调用,所以只要环境支持Promise,就能正常使用这些API。
  • 如果是在Word网页版中,现代浏览器(Chrome、Edge、Firefox等)原生支持Promise,这时候可以不用polyfill,但为了兼容桌面版,还是建议加上polyfill保证全环境可用。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.06 19:52:28