使用displayDialogAsync()打开对话框第二次调用后不起作用

问题描述 投票:0回答:1

使用 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)
并将对话框设置为空。这两种方法都行不通。

有什么建议吗?

谢谢

office365 outlook-addin office-js office365-apps outlook-web-addins
1个回答
0
投票

对于将来发现此问题的任何人,问题是由

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) { ... })
}
© www.soinside.com 2019 - 2024. All rights reserved.