Конфликт displayDialogAsync и html5-history-api

У меня есть приложение от mean-stack, в котором размещен веб-сайт и надстройка Excel. html5 включен, и у него есть

<script src="https://appsforoffice.microsoft.com/lib/1/hosted/office.js"></script>
<script src="https://cdn.rawgit.com/devote/HTML5-History-API/master/history.js"></script>

В надстройке Excel у меня есть кнопка, которая открывает страницу на веб-сайте с помощью Dialog API:

$scope.openDialog = function () {
  Office.context.ui.displayDialogAsync("https://localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD", {}, function () {})   
}

Когда я нажимаю эту кнопку в Excel Online в Chrome, открывается диалоговое окно со следующим URL-адресом (обратите внимание, что # и несколько %2F систематически добавляются), но это не мешает хорошему отображению страницы.

https://localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD?_host_Info=excel|web|16.00|en-us|b6f37f78-e519-7d03-0069-b9c4317a362c|isDialog#%2Fpreview%2Ftmp%2F6wr-4PqdBrYQwjp3AAAD%3F_host_Info=excel%7Cweb%7C16.00%7Cen-us%7Cb6f37f78-e519-7d03-0069-b9c4317a362c%7CisDialog

Однако, когда я нажимаю эту кнопку в Excel Online в Firefox, URL-адрес быстро меняется на следующий URL-адрес, который отображает домашнюю страницу веб-сайта:

https://localhost:3000/home#%2Fpreview%2Ftmp%2F6wr-4PqdBrYQwjp3AAAD%3F_host_Info=excel%7Cweb%7C16.00%7Cen-gb%7C919fff78-e51f-dc20-0c3c-871b7d0ec25d%7CisDialog

Итак, мои вопросы:

1) Почему Office.context.ui.displayDialogAsync систематически добавляет # и %2F к URL-адресу моего веб-сайта? Можно ли предотвратить это?

2) Можно ли сделать URL-адрес (независимо от # и %2F), который принимает Firefox?

Редактировать 1: кажется, что если я не буду использовать html5-history-api, это сработает. Так не знает как отключить html5-history-api для того displayDialogAsync? (Причина, по которой я должен использовать html5-history-api после office.js, находится здесь.)


person SoftTimur    schedule 16.09.2017    source источник
comment
Можете ли вы поделиться ссылкой, где люди могут проверить поведение, которое вы описываете?   -  person Vivek Athalye    schedule 18.09.2017
comment
@VivekAthalye Извините, на данный момент у меня нет другого доменного имени с SSL, на котором размещено приложение среднего стека ...   -  person SoftTimur    schedule 18.09.2017


Ответы (1)


Это не displayDialogAsync делает это. Это частая проблема со стратегией маршрутизации и местоположения Angular. Найдите «угловое приложение добавляет хэш к моим URL-адресам», и вы найдете много информации об этом и решениях.

person Rick Kirkham    schedule 16.09.2017
comment
Я хорошо могу открыть https://localhost:3000/preview/tmp/6wr-4PqdBrYQwjp3AAAD в браузере, именно displayDialogAsync добавляет хеш... - person SoftTimur; 16.09.2017
comment
Я не согласен. Это не код в Office.js, который добавляет хеш-значения к URL-адресу. Но есть в Angular, когда вы используете определенные стратегии определения местоположения. Пожалуйста, выполните поиск, который я предложил. Вы обнаружите, что это происходит не на каждом URL. Это сложное явление. - person Rick Kirkham; 17.09.2017
comment
Вчера я отредактировал ОП... Мои тесты показывают, что если я удалю html5-history-api, хеш не будет добавлен, поэтому между displayDialogAsync и html5-history-api возникает конфликт. Но я должен использовать html5-history-api для всего приложения из-за ">это. - person SoftTimur; 17.09.2017