Office 对话框 API 向子对话框发送消息

Office Dialog API send message to child dialog

我们想使用对话框 API 进行一些更适合较大工作区的额外操作。我们已经可以通过 API 从对话框 (Office.context.ui.messageParent) 向父级发送消息,但是我们还希望能够直接向对话框发送消息,例如 sendMessage 函数,因为示例:

var dialog;
Office.context.ui.displayDialogAsync('https://myDomain/myDialog.html', function (asyncResult) {
    if (asyncResult.status === "failed") { 
        showNotification(asynceResult.error.code = ": " + asyncResult.error.message); 
    } else {
        dialog = asyncResult.value;
        dialog.addEventHandler(Office.EventType.DialogMessageReceived, processMessage);
        dialog.sendMessage({ /* my payload */ }); //???
    }
}); 

有几个选项可以将数据从父级传递给子级:

  1. 查询字符串:displayDialogAsync(myUrl + "?myMessage=...", function...)
  2. localStorage(如果在同一个域上):localStorage.setItem("DIALOG_MESSAGE", myMessage)

然而,这两者都只能真正用于对话框的初始化,它们并没有提供进行异步消息传递的好方法。

这是一个很受欢迎的请求(也是一个好主意),但目前还不受支持。请前往 Office Dev User Voice 并为 "Improve Custom Dialog" 的建议投票,或者创建您自己的新建议。

你可以在父级使用前使用这个displayDialog:

localStorage.setItem("clientID", "15963ac5-314f-4d9b-b5a1-ccb2f1aea248");

然后在您的 JavaScript 文件中:

var clientID = localStorage.getItem("clientID");

DialogApi 1.2 获得了一项新功能 messageChildhttps://docs.microsoft.com/en-us/office/dev/add-ins/develop/dialog-api-in-office-add-ins#use-messagechild-from-the-host-page