Office js Office对话框API messageParent在Word的Edge中不起作用

Office js Office对话框API messageParent在Word的Edge中不起作用,office-js,microsoft-edge,office-addins,Office Js,Microsoft Edge,Office Addins,如果我不复制_host_信息,我会在IE和Edge上弹出的对话框中看到“警告office.js在office客户端之外加载” 我正在使用中间人服务身份验证流。它在Firefox、Chrome和Word桌面客户端上运行良好,即使没有主机信息 当我复制_host_信息时,对话框在最后一次重定向回加载项时自动关闭 步骤: Trigger Office.context.ui.displayDialogAsync,带有查询重定向B64的加载项位置,其中包含指向mvc外部登录的url,并将uri重定向回加载

如果我不复制_host_信息,我会在IE和Edge上弹出的对话框中看到“警告office.js在office客户端之外加载”

我正在使用中间人服务身份验证流。它在Firefox、Chrome和Word桌面客户端上运行良好,即使没有主机信息

当我复制_host_信息时,对话框在最后一次重定向回加载项时自动关闭

步骤:

  • Trigger Office.context.ui.displayDialogAsync,带有查询重定向B64的加载项位置,其中包含指向mvc外部登录的url,并将uri重定向回加载项
  • 加载项重新打开检查重定向B64是否存在,并将其解码回url
  • 我们将从窗口位置将hostinfo复制到redirct url
  • 重定向到mvc应用程序,该应用程序质询登录提供程序,然后返回mvc应用程序进行登录,然后重定向回带有访问令牌和其他查询参数的加载项
  • 从对话框事件处理程序中,我得到对话框关闭错误

    代码:

    在login.microsoft.com回调到mvc应用程序后,dialog api似乎失去了对对话框的跟踪。为什么?

    有关“office.js在外部加载”警告,请参阅。Office.js仅在Office应用程序中工作,例如在任务窗格中。要运行正在开发的外接程序,您需要将其加载到Office应用程序中

    此外,在使用中间商服务API时应该小心。通常,服务只有一个API方法来进行初始调用并创建上下文对象。这样的对象无法完全字符串化,因此无法将其从Office对话框传递到父页面。有关更多信息,请参阅本文的:部分

    建议使用Office对话框API打开登录页面。有关在身份验证流中使用对话框API的信息,请参阅

    /* Render application after Office initializes */
    Office.initialize = async () => {
    
        let redirectUrl:string = window.atob(UrlHelper.getUrlParameter("redirectb64"));
        if(redirectUrl !== "") {
            console.log("DialogUrl",window.location);
            console.log("Redirectb64 (atob)",redirectUrl);
    
            //Must copy over this to the redirectUri;
            let hostInfo:string = encodeURIComponent("&_host_Info=" + UrlHelper.getUrlParameter("_host_Info"));
            redirectUrl = StringHelper.insert(redirectUrl.indexOf("&state="),redirectUrl,hostInfo);
            console.log("Redirectb64 (atob) with hostInfo",redirectUrl);
            window.location.href = redirectUrl;
            return;
        }
    
        var response:AxiosResponse = await axios.get("assets/appconfig.json");
        console.log("config loaded.", response.data);
        AuthHelper.SetAccessToken();
    
        //console.log("AuthHelper.SetAccessToken", typeof AuthHelper.SetAccessToken);
    
        const myLanguage: string = Office.context.displayLanguage;
        render(App,myLanguage, true, response.data);
    };