Обход правила ограничения домена в надстройках 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 см. в статье Обмен сообщениями между окнами.
См. также
Office Add-ins