Office.context.ui.displayDialogAsync抛出5001内部错误

时间:2016-08-30 07:45:39

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

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

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

  $('#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网络客户端进行调试: Screenshot of debug session in Chrome

我不知道它是否与此错误相关,但在我点击clickMeButton之前,我可以在加载网站后看到以下错误: enter image description here

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 Mail加载项?这可能是一个问题,因为它会在主Outlook html页面的上下文中加载另一个html页面。但它不能在Outlook桌面客户端中运行。

1 个答案:

答案 0 :(得分:5)

  • 错误

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

来自ms-allow-popupsvendor prefixed css property

的事实

实际上,您可能知道您的加载项位于沙盒iframe中。为了能够做一些事情,这个沙盒iframe有一些额外的权限。例如,弹出窗口是允许的,但由于MS IE,谷歌浏览器,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可用时使用以下示例代码(typescript)。

    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感兴趣。