OfficeJs: надстройка Outlook: сообщение Dialog APIParent не работает с OWA - PullRequest
0 голосов
/ 08 января 2019

Справочная информация: У меня есть надстройка outlook, которая в основном открывает диалог входа в систему, который открывает страницу надстройки, размещенную на моем веб-сайте, отсюда пользователь перенаправляется на auth0, откуда он перенаправляется на login.live.com и после авторизации я получаю либо код, либо ошибку вернуться на другую страницу снова на моем сайте.

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

Проблема: При использовании OWA и размещении кода надстройки на моем веб-сайте элемент управления не возвращается к части из диалогового окна.

Я уже добавил все URL, которые пользователь может перейти в «Домены приложений». И подтвердили, что родительское и дочернее окна размещены в одном домене (и поддомене).

Код

manifest.xml

<AppDomains>
<AppDomain>https://auth0url.auth0.com</AppDomain>
<AppDomain>https://localhost</AppDomain>
<AppDomain>https://login.live.com</AppDomain>
<AppDomain>https://login.microsoftonline.com</AppDomain>    
<AppDomain>https://my.website.com</AppDomain>

index.html (Opener Html)

<!-- Load the Office JavaScript APIs -->
<script src="https://appsforoffice.microsoft.com/lib/1.1/hosted/Office.js" type="text/javascript"></script>
<script src="index.js"></script>

index.js

// height and width are percentages of the size of the screen.
Office.context.ui.displayDialogAsync(fullUrl, {height: 45, width: 55, displayInIframe: false},
      function (asyncResult) {
            console.log(asyncResult);
            if (asyncResult.status === "failed") {

                //Error code 12009 means "user chose to ignore the dialog box"
                if (asyncResult.error.code === 12009) {
                  // Handle failure    
                } else {
                  // Do something else     
                }
            } else {
                dialog = asyncResult.value;
                dialog.addEventHandler(Office.EventType.DialogMessageReceived, handleToken);
                dialog.addEventHandler(Office.EventType.DialogEventReceived, dialogClosing);

       }
    });

popupRedirect.js (размещается только на моем сайте (аналогично родительскому окну). Этот файл запускает строку json обратно к родителю)

    Office.initialize = function() {
        $(document).ready(function () {

            // Some Code before this and after this not relevent to issue
            var messageObject = {outcome: "something"};
            // Tell the task pane about the outcome.
            Office.context.ui.messageParent(jsonMessage);

      ...
        });
    });

Ожидаемые результаты:

«messageParent» должен запускать код, написанный в «handleToken» индекса.js

Фактические результаты (Может или не может быть связано)

appsforoffice.micros…16.01.debug.js:8202 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('auth0url.auth0.com') does not match the recipient window's origin ('https://my.website.com').

Код, написанный в handleToken, не срабатывает.

Обратите внимание, что: displayInIframe: true не работает, так как login.live.com не разрешает iframes.

Используемая среда для тестирования:

Google Chrome 71.0.3578.98 (официальная сборка) (64-разрядная версия) (когорта: стабильная) Редакция 15234034d19b85dcd9a03b164ae89d04145d8368-refs / Branch-Heads / 3578 @ {# 897} ОС Windows 10 JavaScript V8 7.1.302.31 Flash 32.0.0.101

1 Ответ

0 голосов
/ 11 января 2019

Наша проблема наконец-то решена, хотя я не знаю, почему это должно быть проблемой. Это может быть связано с нашей настройкой, но в любом случае вот оно:

Мы использовали auth0, который был размещен в домене auth0url.auth0.com. В диалоговом окне управление перешло от my.website.com к auth0url.auth0.com, а затем к экранам входа в систему MS и обратно на my.website.com. И пока мы сделали , указали этот домен в доменах приложений. По какой-то причине офисная библиотека не смогла это распознать. и пожаловался

appsforoffice.micros…16.01.debug.js:8202 Failed to execute 'postMessage' on 'DOMWindow': The target origin provided ('auth0url.auth0.com') does not match the recipient window's origin ('https://my.website.com')

Итак, какие изменения решили эту проблему?

Auth0 также поддерживает собственный домен вместо своего, что означало, что когда мы перешли с auth0url.auth0.com на myauth0.mywebsite.com (и, конечно, мы добавили это в домены приложений), надстройка могла выполнять «postMessage».

...