我开发了一个新的 Outlook 插件(从普通打字稿、带有 webpack 的 yeoman 模板开始),它使用任务窗格作为读取和写入(撰写)窗口。
阅读模式适用于所有版本(Web 和桌面),包括 Windows、Mac 上的桌面客户端...
使用 SmartAlerts (launchevent.js)(
OnMessageSend
和 OnNewMessageCompose
处理程序)的写入模式也适用于大多数版本,只是不适用于 Windows 上的桌面客户端。
撰写新消息时,加载项需要很长时间才能加载,并且一旦加载,就不会触发
OnNewMessageCompose
事件。然后,在发送电子邮件时,由于“加载项无法处理消息”,一分钟后失败(或类似的情况,不执行任何操作,因为第一部分之一正在进行永远不会到达我们的服务器的 API 调用) .
我已将代码转译为所有不同的 ES 版本并运行了 ES 检查,一切都很好。我已确保不存在“三元运算符”,我已包含对两个处理程序的
Office.actions.associate
调用。这些功能已在清单中注册,...
我尝试附加调试器,但当加载项/Outlook 在调试模式下运行时,我的 VS 代码不会附加(遵循知识/帮助文件,但它缺少一个步骤,已过时,或者只是有些不同/对我来说不起作用),但启用的运行时记录器没有报告与加载项相关的任何问题。
我之前曾通过
itemSend
文件使用“旧”commands.html
处理程序,该处理程序没有此问题,但我们希望加载项在 AppSource 上列出,因此使用新的 SmartAlerts。
然后我从我的
launchevent.js
中删除了所有内容,只包括基础知识,但我仍然有问题。
目前看起来像这样:
function onNewMessageComposeHandler(event) {
try {
if (Office.context.mailbox.item) {
Office.context.mailbox.item.notificationMessages.replaceAsync("info", {
type: Office.MailboxEnums.ItemNotificationMessageType.InformationalMessage,
message: 'Show alert message here!',
icon: "Icon.16x16",
persistent: true
});
}
} catch (err) {}
}
function onMessageSendHandler(event) {
}
if (Office.context && (Office.context.platform === Office.PlatformType.PC || Office.context.platform == null)) {
Office.actions.associate("onMessageSendHandler", onMessageSendHandler);
Office.actions.associate("onNewMessageComposeHandler", onNewMessageComposeHandler);
}
相关清单部分如下所示(与文档相同):
<Runtimes>
<Runtime resid="WebViewRuntime.Url">
<Override type="javascript" resid="JSRuntime.Url"/>
</Runtime>
</Runtimes>
<DesktopFormFactor>
<FunctionFile resid="Commands.Url" />
<!-- Enable launching the add-in on the included event. -->
<ExtensionPoint xsi:type="LaunchEvent">
<LaunchEvents>
<LaunchEvent Type="OnNewMessageCompose" FunctionName="onNewMessageComposeHandler"/>
<LaunchEvent Type="OnMessageSend" FunctionName="onMessageSendHandler" SendMode="SoftBlock" />
</LaunchEvents>
<!-- Identifies the runtime to be used (also referenced by the Runtime element). -->
<SourceLocation resid="WebViewRuntime.Url"/>
</ExtensionPoint>
</DesktopFormFactor>
..
<bt:Urls>
<bt:Url id="Commands.Url" DefaultValue="https://{server-address}/outlook-dev/commands.html?&_v=1.0.13.466" />
<bt:Url id="TaskpaneRead.Url" DefaultValue="https://{server-address}/outlook-dev/taskpane.html?mode=read&_v=1.0.13.466" />
<bt:Url id="TaskpaneWrite.Url" DefaultValue="https://{server-address}/outlook-dev/taskpane.html?mode=write&_v=1.0.13.466" />
<bt:Url id="WebViewRuntime.Url" DefaultValue="https://{server-address}/outlook-dev/commands.html?&_v=1.0.13.466" />
<!-- Entry needed for Outlook on Windows. -->
<bt:Url id="JSRuntime.Url" DefaultValue="https://{server-address}/outlook-dev/launchevent.js?&_v=1.0.13.466" />
</bt:Urls>
这不起作用(在 Outlook Office 365 上测试)
不确定我错过了什么,或者原因可能是什么,但我已经用尽了代码方面的所有选项,所以一定有一些“愚蠢而简单”的东西我错过了..
一些额外信息:
因新发现而编辑:
因此,我深入研究了事件查看器、运行时记录器等,发现我的 ClientLog 中出现错误
"Access to one of your manifest's resources is denied. .."
,事件查看器中出现错误 "We're sorry, we couldn't access {add-in}. Make sure you have a network connection."
。它似乎与 launchevent.js
的资源有关,因为当我输入该资源的无效 URL 并且 taskpane.html
和 commands.html
工作时,错误发生了变化。
我尝试在多个服务器(所有不同的服务器配置)上托管 launchevent.js 文件,但仍然收到相同的错误。然后我也尝试确保资源 URL 上没有附加查询参数,同样的问题。该文件是公开访问的,允许所有请求标头和方法,...
Windows 上的桌面客户端是否使用任何检查、限制或特殊请求项在后台获取
launchevent.js
文件而导致其无法获取,或者这只是一个“一般错误”,当存在其他情况时游戏中出现问题?
几个小时后编辑:
我在某处找到了一篇与身份验证和 SSO 相关的关于
.well-known/microsoft-officeaddins-allowed.json
的文章,因此将其添加到服务器,其中包含 allowed
的 launchevent.js
路径以及作为应用程序的加载项。我现在不再收到有关被拒绝的 RuntimeErrors(成功,文档可能还应该引用 JSRuntime.Url 资源的这一部分...),但仍然存在与“我们很抱歉,无法访问”相关的 EventViewer 错误{插件}”。
我已经通过 Fiddler Classic 检查了请求,我可以看到对必要文件的所有请求,它们都是 200 OK,所以所有内容都已加载,但启动事件仍然没有触发它的功能。
我相信这不是“愚蠢而简单”的事情,因为我已经尝试了很多方法并且遇到了与您相同的问题。事件触发的次数大约是 100 次尝试中的 1 次,有时甚至更罕见。这种情况在调试和生产变体中都会发生。 我在:他们的 github 中创建了一个问题,但他们在 3-4 个月内没有回复,看起来没有人对这个主题感兴趣。在我看来,这与 javascript office.js 库的运行时有关。当加载速度更快时,事件将触发,而当连接不稳定/速度较慢等时(99%的情况),事件将不会触发,这可以解释我的问题。