Обход правила ограничения домена в надстройках Office

Политика одного источника, применяемая браузером или элементом управления webview, не позволяет скрипту, загруженному из одного домена, получать свойства веб-страницы из другого домена или управлять ими. Это значит, что по умолчанию домен запрошенного URL-адреса должен быть тем же, что и домен текущей веб-страницы. Например, эта политика препятствует веб-странице в одном домене выполнять вызовы веб-службы XmlHttpRequest в домен, отличный от домена своего размещения.

Так как надстройки Office размещаются в элементе управления webview, к скриптам, выполняемым на веб-страницах, применяется та же политика источника.

Правило ограничения домена может стать помехой во многих случаях (например, если веб-приложение размещает контент и API на нескольких поддоменах). Существует несколько распространенных способов безопасного обхода правила ограничения домена. В этой статье предоставлены только короткие общие сведения о некоторых из них. Воспользуйтесь приведенными ссылками, чтобы приступить к изучению этих приемов.

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

Один из способов обойти правило ограничения домена — использовать JSONP, чтобы указать прокси для веб-службы. Для этого можно включить тег script с атрибутом src, указывающим на некоторый скрипт, размещенный на каком-либо домене. Вы можете создать теги script программным способом, динамически создать URL-адрес, на который будет указывать атрибут src, а затем передать параметры по URL-адресу с помощью параметров запроса URI. Поставщики веб-служб создают и размещают код JavaScript с использованием определенных URL-адресов и возвращают разные сценарии в зависимости от параметров запроса URI. Затем эти сценарии выполняются в точке вставки и работают надлежащим образом.

Ниже приведен пример кода JSONP, где используется способ, который будет работать в любых надстройках Office.

// Dynamically create an HTML SCRIPT element that obtains the details for the specified video.
function loadVideoDetails(videoIndex) {
    // Dynamically create a new HTML SCRIPT element in the webpage.
    const script = document.createElement("script");
    // Specify the URL to retrieve the indicated video from a feed of a current list of videos,
    // as the value of the src attribute of the SCRIPT element. 
    script.setAttribute("src", "https://gdata.youtube.com/feeds/api/videos/" + 
        videos[videoIndex].Id + "?alt=json-in-script&callback=videoDetailsLoaded");
    // Insert the SCRIPT element at the end of the HEAD section.
    document.getElementsByTagName('head')[0].appendChild(script);
}

Реализация серверного кода с использованием схемы авторизации на основе маркеров

Еще один способ обойти правило ограничения домена — предоставить серверный код, использующий потоки OAuth 2.0, чтобы обеспечить для одного домена авторизованный доступ к ресурсам, размещенным на другом.

Совместное использование ресурсов из разных источников (CORS)

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

Примечание.

Сведения об использовании CORS в надстройке Outlook, которая реализует активацию на основе событий или встроенные отчеты о нежелательной почте (предварительная версия), см. в статье Использование единого входа (SS) или совместного доступа к ресурсам между источниками (CORS) в надстройке Outlook на основе событий или рассылки нежелательной почты.

Создание собственного прокси с использованием IFRAME и POST MESSAGE (обмен сообщениями между окнами)

Пример создания собственного прокси с использованием IFRAME и POST MESSAGE см. в статье Обмен сообщениями между окнами.

См. также