如何使用Office365中的对话框API从父级向对话框发送Json对象

时间:2016-11-01 06:44:08

标签: json office365 office-addins office-js office-app

我是新的办公室365字JavaScript API。我正在尝试使用对话框api将Json对象发送到父对话框。但我无法找到更好的解决方案。我发现可以使用下面的代码片段将对话框中的Json对象发送到父对象。

Office.context.ui.messageParent

有人可以通过代码片段给我一个很好的解决方案来解决这个问题吗?

3 个答案:

答案 0 :(得分:2)

你可以尝试类似的东西

在父网页(实际加载项)中的javascript代码

Office.context.ui.displayDialogAsync(url, options, function(result) {
    var dialog = result.value;
    dialog.addEventHandler(Office.EventType.DialogMessageReceived, function(args){
        dialog.close();
        var json = JSON.parse(args.message);
        //do what ever you need to do...

    });
});

注意:为了简单起见,如果回调函数收到错误结果,我省略了“错误检查”。你也应该照顾好。

url打开的网页将具有在将json对象表示为字符串后推回json对象的功能

var asString = JSON.stringify(myObj);
Office.context.ui.messageParent(asString);

当然,在对话框窗口中打开的网页也必须引用Office.js。 以下是此所谓dialogAPI https://dev.office.com/reference/add-ins/shared/officeui

的文档链接

修改

最初的问题是将数据从父级发送给孩子

如果您需要将信息发送到在dialogAPI中打开的页面。我建议您将查询参数附加到url。您可以对Json对象进行字符串化并传递它。这不是很干净的想法。 Standardized way to serialize JSON to query string?

答案 1 :(得分:0)

您可以轻松地将JSON数据或对象发送回您的父母。

此代码段应位于您的子页面(对话框页面)JS文件中。

(function () {
    "use strict";

    // The Office initialize function must be run each time a new page is loaded
    Office.initialize = function (reason) {
        $(document).ready(function () {
            $('#btnLogin').click(submit);
        });
    };
    function submit() {
        // Get and create the data object.
        var email = $('#txtEmail').val();
        var password = $('#txtPassword').val();

        var data = {
            email: email,
            password: password
        }

        // Create the JSON and send it to the parent.
        var json = JSON.stringify(data); 

        Office.context.ui.messageParent("json");
    }    
})();

答案 2 :(得分:0)

见这里:https://dev.office.com/docs/add-ins/develop/dialog-api-in-office-add-ins

查找部分"将信息传递到对话框"。

两种主要方式:

  • 向网址添加查询参数
  • 将信息存储在主机窗口和对话框都可访问的位置,例如本地存储