Условно загружайте Office.js, когда веб-приложение загружается как надстройка Outlook. - PullRequest
0 голосов
/ 24 октября 2019

В настоящее время я создаю веб-приложение, которое можно загрузить как автономную версию в браузере, так и в виде надстройки Outlook. Чтобы использовать среду Outlook, я загружаю office.js в макет моего веб-приложения. Я хотел бы проверить, загружается ли веб-приложение в Outlook (как надстройка) или как веб-приложение в браузере, чтобы можно было условно скрыть функции, которые требуют запуска приложения в Outlook.

В соответствии с существующим вопросом по теме (см. Здесь: Проверьте, загружен ли Office.js за пределы клиента Office ), office-js-helpers предоставляют такую ​​информацию с помощью

OfficeHelpers.Utilities.host

Это возвращает либо "внешний вид", либо неопределенный в зависимости от контекста, что именно то, что я ищу (с оговоркой, что вы сначала загружаете office.js, а затем еще один сценарий, чтобы проверить, является ли office.jsна самом деле нужно). К сожалению, мне приходится поддерживать старые версии Outlook, для которых приведенное выше решение возвращает неопределенное значение даже при загрузке в outlook (до 2 лет после последней версии - никаких изменений в поле зрения).

Интересно, что сам по себе office.js(или, скорее, его зависимость, o15apptofilemappingtable.js, https://appsforoffice.microsoft.com/lib/1.1/hosted/o15apptofilemappingtable.js) уже содержит строку в минимизированном JavaScript, которая может выяснить, что office.js загружен вне среды Outlook, и выдает предупреждение:

if(d._hostInfo.isRichClient){var e,a,u="Warning: Office.js is loaded outside of Office client",

Опять же, это именно то, что я ищу, но я, кажется, не могу обернуться вокруг того, как я мог бы реализовать такую ​​проверку сам. Я знаю, что вы можете проверить, есть ли Office. js полностью загружается с помощью Office.onReady () (как показано здесь: https://docs.microsoft.com/en-us/office/dev/add-ins/develop/understanding-the-javascript-api-for-office),, но все же я хочу проверить, ДО того, как office.js загружен, действительно ли он необходим (или нет)когда приложение запускается вне среды Outlook).

Кто-то сталкивался с подобным сценарием и может поделиться своимипонимание

1 Ответ

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

Один из простых вариантов - добавить параметр запроса к URL-адресу надстройки в манифесте. Затем, когда этот параметр запроса отсутствует, вы знаете, что приложение работает прямо в веб-браузере. Этот метод также можно использовать для различения нескольких URL-адресов в манифесте, которые загружают одну и ту же страницу.

Например, URL-адрес манифеста будет выглядеть примерно так:

<SourceLocation DefaultValue="https://.../taskpane.html?host=Outlook" />

Одно из преимуществ этогоПодход заключается в том, что вы можете вообще пропустить загрузку Office.js.

Другой подход заключается в вызове API после загрузки Office.js. Основываясь на вашем примере, есть аналогичный Outlook API с именем Office.context.mailbox.diagnostics.hostName, и он доступен в более старых версиях Outlook (версия набора требований API - 1.0, что является самой низкой версией).

Но на самом деле, когда нетПри запуске в Outlook Office.js не будет загружать API-интерфейсы Outlook, а Office.context.mailbox равно undefined. Итак, в javascript вы просто проверите, определен ли Office.context.mailbox.

Как указано в вопросе, для вызова любого API-интерфейса Office требуется подождать, пока не будет вызван Office.initialize или Office.onReady(), поэтому это не так. предпочтительный вариант для лучшей производительности.

...