Outlook 加载项 launchevent.js 未在桌面客户端 Windows 上加载/触发

问题描述 投票:0回答:1

我开发了一个新的 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?&amp;_v=1.0.13.466" />
          <bt:Url id="TaskpaneRead.Url" DefaultValue="https://{server-address}/outlook-dev/taskpane.html?mode=read&amp;_v=1.0.13.466" />
          <bt:Url id="TaskpaneWrite.Url" DefaultValue="https://{server-address}/outlook-dev/taskpane.html?mode=write&amp;_v=1.0.13.466" />
          <bt:Url id="WebViewRuntime.Url" DefaultValue="https://{server-address}/outlook-dev/commands.html?&amp;_v=1.0.13.466" />
          <!-- Entry needed for Outlook on Windows. -->
          <bt:Url id="JSRuntime.Url" DefaultValue="https://{server-address}/outlook-dev/launchevent.js?&amp;_v=1.0.13.466" />
        </bt:Urls>

这不起作用(在 Outlook Office 365 上测试)

不确定我错过了什么,或者原因可能是什么,但我已经用尽了代码方面的所有选项,所以一定有一些“愚蠢而简单”的东西我错过了..

一些额外信息:

  • bundle.js 已正确下载到 %localdata% 目录中,并包含最新更改
  • 尝试在不使用平台检查的情况下调用关联函数

因新发现而编辑:

因此,我深入研究了事件查看器、运行时记录器等,发现我的 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,所以所有内容都已加载,但启动事件仍然没有触发它的功能。

windows outlook office-js
1个回答
0
投票

我相信这不是“愚蠢而简单”的事情,因为我已经尝试了很多方法并且遇到了与您相同的问题。事件触发的次数大约是 100 次尝试中的 1 次,有时甚至更罕见。这种情况在调试和生产变体中都会发生。 我在:他们的 github 中创建了一个问题,但他们在 3-4 个月内没有回复,看起来没有人对这个主题感兴趣。在我看来,这与 javascript office.js 库的运行时有关。当加载速度更快时,事件将触发,而当连接不稳定/速度较慢等时(99%的情况),事件将不会触发,这可以解释我的问题。

© www.soinside.com 2019 - 2024. All rights reserved.