У меня есть веб-приложение, которое открывается через приложение Facebook Messenger.На мобильном телефоне он открывается в веб-обозревателе Facebook Messenger, на рабочем столе - в iFrame.Это работает во всех браузерах, кроме IE11.
Мы устанавливаем заголовок X-Frame-Options 'ALLOW-FROM https://www.messenger.com'. Когда приложение впервые загружается в iFrame, оно загружается без проблем.Затем приложение отвечает на запрос с 302 и перенаправляет.Это страница, которая перенаправляется на страницу с сообщением об ошибке «Этот контент не может быть отображен во фрейме».В консоли нет ошибки, как это обычно бывает, когда содержимое iFrame блокируется в других браузерах.
Есть ли какой-то аспект перенаправления в iFrame, который IE11 не поддерживает?
Подробнееapplication: это отрендеренное веб-приложение на стороне сервера Django, использующее JS на клиенте.Я попытаюсь разбить порядок операций:
Запрос 1: GET к конечной точке1, которая возвращает документ - это успешно отображается в iFrame
Запрос 2: POST к конечной точке1 из JS наклиент
const formData = new FormData();
formData.append('psid', thread_context.psid);
formData.append('tid', thread_context.tid);
const xhr = new XMLHttpRequest();
xhr.onload = function (event) {
if (this.status !== 200) {
handleError(this);
return;
}
window.location.href = this.responseURL;
};
xhr.onerror = handleError;
xhr.open('POST', postUrl);
xhr.send(formData);
Ответ - это код состояния 302 с заголовком местоположения
Запрос 3: GET к местоположению, возвращенному в ответе 302.Ответ - код состояния 200 и включает документ в теле.Это приводит к срабатыванию xhr.onload выше, а затем вызывает window.location.href
для перенаправления на новое местоположение, возвращенное ранее.
Запрос 4: GET в результате обновления window.location.href
.Ответ - код состояния 200. Это когда браузер отображает сообщение «содержимое не может быть отображено во фрейме».
Каждый из этих запросов включает заголовок X-Frame-Options 'ALLOW-FROM https://www.messenger.com' в ответе.