Альтернативные способы передачи сообщений в диалоговое окно с главной страницы

Рекомендуемый способ передачи данных и сообщений с родительской страницы в дочернее диалоговое окно — с messageChild помощью метода, описанного в разделе Использование API диалога Office в надстройках Office. Если надстройка работает на платформе или узле, который не поддерживает набор требований DialogApi 1.2, существует два других способа передачи информации в диалог.

  • Храните сведения в любом месте, доступном как в окне узла, так и в диалоговом окне. Два окна не имеют общего хранилища сеансов (свойство Window.sessionStorage ), но если у них один и тот же домен (включая номер порта, если он есть), они совместно используют общее локальное хранилище.

    Примечание.

    Изменения в безопасности браузера повлияют на вашу стратегию обработки маркеров.

    • Если надстройка выполняется в Office в Интернете в устаревшая версия Microsoft Edge (не Chromium) или браузере Safari, диалоговое окно и область задач не используют одно локальное хранилище, поэтому их нельзя использовать для обмена данными между ними.
    • Начиная с версии 115 для браузеров на основе Chromium, таких как Chrome и Edge, выполняется тестирование секционирования хранилища, чтобы предотвратить отслеживание между сайтами по боковому каналу (см. также политики браузера Microsoft Edge). Это означает, что данные, хранящиеся API хранилища, например локальным хранилищем, доступны только для контекстов с тем же источником и тем же сайтом верхнего уровня. Чтобы обойти эту проблему, в браузере перейдите в раздел chrome://flags или edge://flags, а затем установите для флага Экспериментальное секционирование стороннего хранилища (#third-party-storage-partitioning) значение Отключено. По возможности рекомендуется передавать данные между диалогом и областью задач с помощью методов messageParent и messageChild, как описано в разделе Использование API диалога Office в надстройках Office.
  • Добавьте параметры запроса в URL-адрес, который передается в метод displayDialogAsync.

Использование локального хранилища

Чтобы использовать локальное setItem хранилище, вызовите метод window.localStorage объекта на главной странице перед вызовом displayDialogAsync , как показано в следующем примере.

localStorage.setItem("clientID", "15963ac5-314f-4d9b-b5a1-ccb2f1aea248");

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

const clientID = localStorage.getItem("clientID");
// You can also use property syntax:
// const clientID = localStorage.clientID;

Использование параметров запроса

В приведенном ниже примере показано, как передавать данные с помощью параметра запроса.

Office.context.ui.displayDialogAsync('https://myAddinDomain/myDialog.html?clientID=15963ac5-314f-4d9b-b5a1-ccb2f1aea248');

Пример, в котором используется эта техника, см. в статье Вставка диаграмм Excel с помощью Microsoft Graph в надстройке PowerPoint.

Код в вашем диалоговом окне может проанализировать URL-адрес и прочитать значение параметра.

Важно!

Office автоматически добавляет параметр запроса _host_info в URL-адрес, который передается displayDialogAsync. (Он добавляется после пользовательских параметров запроса, если они есть. Он не добавляется к каким-либо последующим URL-адресам, по которым будет переходить диалоговое окно.) Корпорация Майкрософт может изменить содержимое этого значения или полностью удалить его в будущем, поэтому ваш код не должен читать его. Это же значение добавляется в хранилище сеансов диалогового окна (свойство Window.sessionStorage ). Ваш код не должен ни считывать это значение, ни записывать в него данные.