Office Dialog API messageParent не работает в Edge for Word - PullRequest
0 голосов
/ 14 октября 2019

Если я не копирую _host_Info, я получаю «предупреждение, что office.js загружен вне офисного клиента» во всплывающем диалоговом окне в IE и Edge.

Я использую поток аутентификации службы посредника. Он отлично работает на клиентах Firefox, Chrome и Word Desktop, даже без _host_Info.

Когда я копирую _host_Info, диалоговое окно автоматически закрывается при последнем перенаправлении обратно в надстройку.

Шаги:

  1. Триггер Office.context.ui.displayDialogAsync, расположение надстройки с запросом redirectb64, содержащим URL-адрес внешнего входа в mvc с перенаправлением uri обратно в надстройку.
  2. Снова открыть надстройку, проверить, если redirectb64существовать и декодировать его обратно в URL
  3. из местоположения окна, мы скопируем информацию хоста в URL перенаправления
  4. , перенаправленный в приложение mvc, которое вызывает провайдера входа в систему, а затем обратно в приложение mvc для подписи-в и после перенаправления обратно в надстройку с токеном доступа и другими параметрами запроса.

Из обработчика событий диалога я получаю сообщение об ошибке закрытия диалога.

Код:

/* 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);
};

Кажется, что диалоговое окно api потеряло связь с диалогом после обратного вызова login.microsoft.com к приложению mvcп. Почему?

1 Ответ

0 голосов
/ 15 октября 2019

Для предупреждения "office.js загружен снаружи" вы можете обратиться к этой теме . Office.js будет работать только внутри приложения Office, например, в области задач. Чтобы запустить надстройку, которую вы разрабатываете, вам необходимо загрузить ее в приложение Office.

Кроме того, вы должны быть осторожны при использовании API-интерфейсов службы посредника. Часто у службы есть единственный метод API, который выполняет начальный вызов и создает объект контекста. Подобный объект не может быть полностью строковым, поэтому его нельзя передать из диалогового окна Office на родительскую страницу. Для получения дополнительной информации вы можете обратиться к части: Услуги посредника статьи.

Для открытия страницы входа рекомендуется использовать API-интерфейсы Office Dialog. Для использования API Dialog в потоке аутентификации вы можете обратиться к этой статье .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...