Outlook加载项ItemSend事件触发报错,command.js对应函数未执行如何解决
可能的故障原因及排查方案:
- 未配置正确的FunctionFile指向
ItemSend事件绑定的处理函数,必须从manifest中<FunctionFile>节点指定的JS文件加载,你需要确认manifest中已经添加了该节点,且其resid对应的资源路径正确指向你的command.js文件,示例配置如下:
<FunctionFile resid="Commands.Url" /> <!-- 对应的Resources节点下需正确配置Commands.Url的实际路径 --> <Resources> <bt:Urls> <bt:Url id="Commands.Url" DefaultValue="https://你的加载项域名/command.js" /> </bt:Urls> </Resources>
- 处理函数签名不符合要求
ItemSend事件的处理函数必须接收event作为入参,且逻辑执行完成后必须调用event.completed()方法通知Outlook处理完成,否则会触发执行超时错误,正确的函数定义示例:
// 必须是全局作用域下的函数 function validateSubjectAndCC(event) { // 你的业务校验逻辑 // 处理完成后必须调用completed,allowEvent为true允许发送,false阻止发送 event.completed({ allowEvent: true }); }
- 函数没有挂载到全局作用域
你定义的validateSubjectAndCC函数必须是全局作用域可访问的,不能封装在闭包、前端框架的组件作用域、IIFE立即执行函数内部,如果是模块化开发的场景,需要手动把函数挂载到window对象上:
window.validateSubjectAndCC = validateSubjectAndCC;
- 加载项权限不足
ItemSend事件需要至少ReadWriteItem级别的权限,你需要确认manifest中的<Permissions>节点配置正确:
<Permissions>ReadWriteItem</Permissions>
- API要求集不兼容
同步执行模式的ItemSend事件需要Outlook支持Mailbox API 1.8及以上版本,你需要确认使用的Outlook客户端/网页版版本符合要求,且manifest中已经声明了对应的要求集:
<Requirements> <Sets> <Set Name="Mailbox" MinVersion="1.8" /> </Sets> </Requirements>
- command.js加载失败
检查command.js的部署路径是否可以正常公网访问,有没有跨域配置问题,你可以通过Outlook调试模式查看控制台,确认是否存在JS文件加载404、CORS拦截之类的报错。
内容的提问来源于stack exchange,提问作者Tamilarasan Rajamanickam
相关产品推荐
相关产品推荐

