使用 displayDialogAsync() 在 Outlook 中打开对话框时,该对话框显示正常。但是,当我使用“X”按钮关闭它并尝试通过调用相同的函数再次重新打开对话框时,它不起作用。
查看控制台日志,尝试重新打开对话框时会抛出此错误:
Callback cannot be specified both in argument list and in optional object.
我如何调用displayDialogAsync:
Office.context.ui.displayDialogAsync(windowURL, LOGIN_DIALOG_OPTIONS, function (asyncResult) {
_dialog = asyncResult.value;
if (_dialog) {
_dialog.addEventHandler(Office.EventType.DialogMessageReceived, onDialogMessageReceived);
_dialog.addEventHandler(Office.EventType.DialogEventReceived, onDialogEventReceived);
}
});
我不确定该错误意味着什么,但我确实尝试调用
_dialog.clearEventHandler(Office.EventType.DialogEventReceived)
并将对话框设置为空。这两种方法都行不通。
有什么建议吗?
谢谢
对于将来发现此问题的任何人,问题是由
displayDialogAsync
改变传递给它的选项对象引起的,并在重用此实例时抛出错误。
所以代替:
const LOGIN_DIALOG_OPTIONS = { width: 30, height: 60 }
function showLoginDialog () {
Office.context.ui.displayDialogAsync(windowURL, LOGIN_DIALOG_OPTIONS, function (asyncResult) { ... })
}
每次调用函数(或克隆对象)时,您都需要创建选项的新实例:
function showLoginDialog () {
const instanceOptions = { width: 30, height: 60 }
// or const instanceOptions = _.cloneDeep(LOGIN_DIALOG_OPTIONS)
Office.context.ui.displayDialogAsync(windowURL, instanceOptions, function (asyncResult) { ... })
}