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

Eiv*_*eth 2 office-addins outlook-addin 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);
      });
  });
Run Code Online (Sandbox Code Playgroud)

我正在使用Chrome中的Outlook网络客户端进行调试: Chrome中调试会话的屏幕截图

我不知道它是否与此错误相关,但在我点击clickMeButton之前,我可以在加载网站后看到以下错误: 在此输入图像描述

osfruntime.js:13 Error while parsing the 'sandbox' attribute: 'ms-allow-popups' is an invalid sandbox flag.OSF.OsfControl._createIframeAndActivateOsfControl @ osfruntime.js:13
Run Code Online (Sandbox Code Playgroud)

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

Ben*_*tra 5

  • 错误

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

来自这ms-allow-popups是一个供应商前缀的css属性.

实际上,您可能知道您的加载项存在于沙盒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上实现的解决方案是使用dialogAPI,当它可用时带有以下示例代码(typescript).

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

如果dialogAPI不可用(旧的Outlook 2016,Outlook Web客户端),我们将回退到基于弹出窗口的身份验证流程.我们使用基于弹出窗口和SignalR/WebSockets的登录机制来实现这样的流程.看到这篇文章这一篇了解更多.

结论:在撰写本文时,带有dialogAPI的Outlook桌面版本并不是很普遍,但我们看到越来越多的用户使用它们.dialogAPI对于我们的加载项开发人员至关重要,因为对于没有dialogAPI的Outlook桌面,大多数情况下基于弹出窗口的身份验证方案将无效(禁用弹出窗口,禁用Web套接字等).目前,没有dialogAPI的Outlook桌面代表了人们在Keluro上登录的最大部分.

注意:用于调试在Outlook桌面的iFrame你可能有兴趣在.