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
相关产品推荐
相关产品推荐

