【问题标题】:Office.context.ui.displayDialogAsync throws 5001 Internal ErrorOffice.context.ui.displayDialogAsync 引发 5001 内部错误
【发布时间】:2016-08-30 07:45:39
【问题描述】:

我正在使用 Visual Studio 项目模板创建一个新的 Outlook 邮件加载项,在该模板中我获得了一个显示当前所选电子邮件属性的示例。

我添加了一个带有单击事件处理程序的按钮,以使用此代码打开一个对话框:

  $('#clickMeButton').click(function () {
      Office.context.ui.displayDialogAsync('https://localhost/OutlookAddinTest/MessageDialog.html', {
          height: 40,
          width: 40,
          requireHTTPS: true
      }, function (result) {
          _dlg = result.value;
          _dlg.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, dialogMessageReceived);
      });
  });

我正在使用 Chrome 中的 Outlook Web 客户端对此进行调试:

我不知道它是否与此错误有关,但是在加载网站后,单击clickMeButton之前,我可以看到以下错误:

osfruntime.js:13 Error while parsing the 'sandbox' attribute: 'ms-allow-popups' is an invalid sandbox flag.OSF.OsfControl._createIframeAndActivateOsfControl @ osfruntime.js:13

displayDialogAsync(...) 函数不应该用于 Outlook 邮件加载项吗?这可能是一个问题,因为它会在主 Outlook html 页面的上下文中加载另一个 html 页面。但它在 Outlook 桌面客户端中也不起作用。

【问题讨论】:

    标签: outlook-addin office-addins office-js


    【解决方案1】:
    • 错误

    错误osfruntime.js:13 Error while parsing the 'sandbox' attribute: ms-allow-popups

    来自ms-allow-popupsvendor prefixed css property这一事实。

    确实,您可能知道您的加载项存在于沙盒 iframe 中。为了能够做一些事情,这个沙盒 iframe 有一些额外的权限。例如,允许弹出窗口,但由于 MS IE、Google Chrome、Firefox 等在沙盒选项上没有 100% 同意,它们有一些“供应商”特定选项,ms-allow-popups 就是其中之一(对于 MS IE)。如果您使用 devtools 浏览 iFrame,您会发现以下选项 sandbox="allow-scripts allow-forms allow-same-origin ms-allow-popups allow-popups".

    要得出错误结论,您可以忽略它,因为它仅由 Chrome 提出,因为它不理解 Microsoft 供应商前缀。您的代码对此不承担任何责任。

    • 身份验证问题

    现在谈谈 dialogAPI。不幸的是,dialogAPI 仅适用于 Microsoft Outlook Desktop 2016 最新版本。 (> = 16.0.6741.1000。)。确保您的 Outlook 桌面是最新的。 Web 客户端(又名 OWA)没有 dialogAPI。您将无法在带有 OWA 的 Chrome 上看到任何对话框。

    我在Keluro 上实现的解决方案是在对话框API 可用时使用以下示例代码(打字稿)。

        hasDialogApi(): boolean {
            var context: any = Office.context;
            try {
                return context.requirements.isSetSupported('DialogAPI', '1.1');
            } catch (ex) {
                return false;
            }
        }
    

    如果 dialogAPI 不可用(旧的 Outlook 2016、Outlook Web 客户端),我们将退回到基于弹出窗口的身份验证流程。我们使用基于弹出窗口并结合 SignalR/WebSockets 的登录机制来实现这样的流程。请参阅this postthis one 了解更多信息。

    结论:在撰写本文时,使用 dialogAPI 构建的 Outlook 桌面还不是很普遍,但我们看到越来越多的用户使用它们。 dialogAPI 对我们的插件开发人员来说至关重要,因为对于没有 dialogAPI 的 Outlook 桌面,大多数情况下基于弹出式的身份验证方案将不起作用(弹出式禁用、Web 套接字禁用等)。目前,没有 dialogAPI 的 Outlook 桌面代表了在 Keluro 上登录的人的最大部分。

    注意:要在 Outlook 桌面中调试 iFrame,您可能对this 感兴趣。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-02-25
      • 1970-01-01
      • 1970-01-01
      • 2021-10-25
      • 1970-01-01
      • 2014-12-05
      相关资源
      最近更新 更多