У меня есть ситуация с ajax запросами которая немного отличается от обычной. В большинстве случаев мой ajax возвращает только часть страницы для обновления определенного блока. Но иногда сервер может вернуть полную HTML страницу со всеми тегами включая html, head и body.
Когда я получаю ответ от сервера, я могу определить что это полная страница, но возможно ли как-то инициировать полную перезагрузку страницы используя этот HTML контент? Мне нужно чтобы запустился полный цикл событий загрузки страницы.
Я уже пробовал просто заменить содержимое body элемента, но это не запускает нужные события и не позволяет изменить содержимое в секции head. Подойдут решения с использованием любых популярных фреймворков.
document.open() + document.write() + document.close() работает. Берешь полный HTML с сервера и пишешь через document.write(). Перезаписывает весь документ включая head, запускает все события загрузки как при обычной навигации. Но способ радикальный - весь JS контекст обнуляется.
А что если через Blob API? Создай блоб из HTML строки с типом text/html, сгенерируй URL через createObjectURL() и редиректь на него. Браузер обработает как обычную страницу, события сработают. Только потом не забудь revokeObjectURL() вызвать - память почистить.
Используй window.location.replace() с data URI. Делаешь data:text/html;charset=utf-8, + encodeURIComponent(htmlString) и кидаешь в replace(). Браузер думает что это обычная навигация, перезагружает скрипты и стили. С энкодингом могут быть косяки на больших файлах, но обычно работает нормально.