OWA:对话框 API 支持
OWA: Dialog API support
我们在 Outlook 加载项中使用对话框进行身份验证。我们的加载项中有逻辑,首先检查对话框 API 支持,然后检查加载项是否被加框 - 在这种情况下,它会弹出一个新的 window 以进行身份验证。最近,对话框 API 为 OWA 亮了起来,给我们带来了一些问题。
我们修复了一些与执行身份验证(我们使用 ADAL.js
)和初始化 Office 的顺序相关的先前问题。但是,一旦我们通过这些,对话框似乎就无法使用 Office.context.ui.messageParent
与加载项通信。
此外,即使加载项订阅了 Microsoft.Office.WebExtension.EventType.DialogEventReceived
事件,它们也不会在对话框关闭时触发(通常关闭对话框 returns 会出现 12006
错误代码,我们保护它)。
我创建了一个简单的 Outlook 加载项,它只打开一个对话框,并验证它仍然无法与 OWA 中的加载项通信。我在下面包含了代码。
插件代码:
Office.initialize = function (reason) {
$(document).ready(function () {
var resultArea = $("span");
$("button").click(function () {
resultArea.text("Opening dialog");
Office.context.ui.displayDialogAsync(
window.location.origin + "/TestAddin/Dialog.html",
{ height: 75, width: 25 },
function (asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
var dialog = asyncResult.value;
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, function handleAuthDialogMessage(message) {
dialog.close();
resultArea.text(message);
});
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogEventReceived, function handleAuthDialogMessage(message) {
resultArea.text("Event encountered");
});
} else {
resultArea.text("Dialog failed");
}
});
});
})
};
对话框代码:
Office.initialize = function (reason) {
$(document).ready(function () {
Office.context.ui.messageParent("dialog-opened");
})
};
现在我已经调整了我们的加载项,在检查或使用对话框 API。这种方法允许我们修复我们的生产错误,并重新启用 OWA 身份验证;但是,我想在对话框正常工作或我们的加载项修复后接受它:)
有人知道这个问题吗?
--- 更新 2/22 ---
看来对话框现在可以向家长发送消息了。不幸的是,仍然存在一个突出的错误,即关闭对话框不会触发要发送到加载项的事件。
无法重现消息父问题。
关于对话框关闭时未触发 DialogEventReceived 事件 - 这是一个已知问题,我们已经在努力修复,但感谢您的报告!
我们在 Outlook 加载项中使用对话框进行身份验证。我们的加载项中有逻辑,首先检查对话框 API 支持,然后检查加载项是否被加框 - 在这种情况下,它会弹出一个新的 window 以进行身份验证。最近,对话框 API 为 OWA 亮了起来,给我们带来了一些问题。
我们修复了一些与执行身份验证(我们使用 ADAL.js
)和初始化 Office 的顺序相关的先前问题。但是,一旦我们通过这些,对话框似乎就无法使用 Office.context.ui.messageParent
与加载项通信。
此外,即使加载项订阅了 Microsoft.Office.WebExtension.EventType.DialogEventReceived
事件,它们也不会在对话框关闭时触发(通常关闭对话框 returns 会出现 12006
错误代码,我们保护它)。
我创建了一个简单的 Outlook 加载项,它只打开一个对话框,并验证它仍然无法与 OWA 中的加载项通信。我在下面包含了代码。
插件代码:
Office.initialize = function (reason) {
$(document).ready(function () {
var resultArea = $("span");
$("button").click(function () {
resultArea.text("Opening dialog");
Office.context.ui.displayDialogAsync(
window.location.origin + "/TestAddin/Dialog.html",
{ height: 75, width: 25 },
function (asyncResult) {
if (asyncResult.status === Office.AsyncResultStatus.Succeeded) {
var dialog = asyncResult.value;
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogMessageReceived, function handleAuthDialogMessage(message) {
dialog.close();
resultArea.text(message);
});
dialog.addEventHandler(Microsoft.Office.WebExtension.EventType.DialogEventReceived, function handleAuthDialogMessage(message) {
resultArea.text("Event encountered");
});
} else {
resultArea.text("Dialog failed");
}
});
});
})
};
对话框代码:
Office.initialize = function (reason) {
$(document).ready(function () {
Office.context.ui.messageParent("dialog-opened");
})
};
现在我已经调整了我们的加载项,在检查或使用对话框 API。这种方法允许我们修复我们的生产错误,并重新启用 OWA 身份验证;但是,我想在对话框正常工作或我们的加载项修复后接受它:)
有人知道这个问题吗?
--- 更新 2/22 ---
看来对话框现在可以向家长发送消息了。不幸的是,仍然存在一个突出的错误,即关闭对话框不会触发要发送到加载项的事件。
无法重现消息父问题。
关于对话框关闭时未触发 DialogEventReceived 事件 - 这是一个已知问题,我们已经在努力修复,但感谢您的报告!