我正在使用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网络客户端进行调试:
我不知道它是否与此错误相关,但在我点击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 Mail加载项?这可能是一个问题,因为它会在主Outlook html页面的上下文中加载另一个html页面。但它不能在Outlook桌面客户端中运行。
答案 0 :(得分:5)
错误osfruntime.js:13 Error while parsing the 'sandbox' attribute: ms-allow-popups
来自ms-allow-popups
是vendor 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 post和this one了解详情。
结论:在撰写本文时,带有dialogAPI的Outlook桌面版本并不是很普遍,但我们看到越来越多的用户使用它们。 dialogAPI对于我们的加载项开发人员至关重要,因为对于没有dialogAPI的Outlook桌面,大多数情况下基于弹出窗口的身份验证方案将无效(禁用弹出窗口,禁用Web套接字等)。目前,没有dialogAPI的Outlook桌面代表了人们在Keluro上登录的最大部分。
注意:要调试Outlook桌面中的iFrame,您可能会对this感兴趣。