Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 11.12.2023, 13:54
Новичок на форуме
Отправить личное сообщение для AlekseiJK Посмотреть профиль Найти все сообщения от AlekseiJK
 
Регистрация: 11.12.2023
Сообщений: 4

работа приложения внутри iframe
Доброго всем дня! Подскажите пожалуйста по следующей проблеме:

Есть SPA срендеренная на next.js
если я ее открываю просто как страницу то все работает, ежели я ее пихаю в айфрейм то ничего не работает в консоле ошибка
Код:
DOMException: Failed to execute 'replaceState' on 'History':
A history state object with URL 'http://localhost:63342/cdoc' cannot be created in a document
with origin 'http://localhost:63342' and URL
 'about:srcdoc'
из которой я понял что роутинг внутри айфрейма использует origin страницы на которой находится iframe в данном примере это "http://localhost:63342"
соответственно он пытается куда-то перейти добавляя в путь /cdoc, но у него естественно не получается потому что для перехода он должен использовать путь https://searchengine.com/cdoc

пытаюсь понять как правильно сконфигурировать iframe чтобы все работало, пока безуспешно, возможно нужно делать что-то с настройками CPS

страницу вставляю используя атрибут srcdoc
через src не получается потому что чтобы получить срендеренную страницу мне нужно отправить гет запрос с заголовками авторизации

атрибут sabdbox выглядит следующим образом
Код:
sandbox="allow-scripts allow-same-origin allow-forms allow-popups
 allow-modals allow-orientation-lock allow-pointer-lock allow-presentation
 allow-top-navigation"

Последний раз редактировалось AlekseiJK, 11.12.2023 в 14:24.
Ответить с цитированием
  #2 (permalink)  
Старый 11.12.2023, 17:22
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Если iframe вставляется со страницы через srcdoc, то он будет иметь ориджин страницы. Ничего тут не сделать. Другого он не знает.
Ответить с цитированием
  #3 (permalink)  
Старый 11.12.2023, 18:42
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Ты хочешь обойти "политику одного источника"

Как конкретный пример объясняющий почему браузеры проводят такую политику. Представь что ты зашёл на любую страницу в интернете а на этой странице есть скрипт который создает ифреймы всех твоих социальных сетей и отправляет "гет запросы с заголовками авторизации" которые должны разослать всем твоим знакомым личные сообщения с как бы твоим сообщением о том как прекрасно увеличить необходимую часть тела в некоторой замечательной клинике xD.

Что бы такого не происходило браузеры разделяют интернет запросы в соответствии с их происхождением/источником/начальным_URL т.е.
источник localhost:63342 не может отправлять и обрабатывать запросы к searchengine.com если этого явно не разрешено источником к которому обращаются с запросом.
Ответить с цитированием
  #4 (permalink)  
Старый 12.12.2023, 11:05
Новичок на форуме
Отправить личное сообщение для AlekseiJK Посмотреть профиль Найти все сообщения от AlekseiJK
 
Регистрация: 11.12.2023
Сообщений: 4

Получается мне нужно чтобы на стороне searchengine.com было разрешено обращаться с запросом?
А как это делается?
Ответить с цитированием
  #5 (permalink)  
Старый 12.12.2023, 13:42
Аватар для ruslan_mart
Профессор
Отправить личное сообщение для ruslan_mart Посмотреть профиль Найти все сообщения от ruslan_mart
 
Регистрация: 30.04.2012
Сообщений: 3,018

А что вы хотите сделать? Я открыл этот сайт, кажется, что это просто поисковая строка, которая редиректит на поиск в гугле.

Имейте ввиду, что гугл-поиск никак не получится затащить в iframe, у них запрет на открытие сайта в iframe.
Ответить с цитированием
  #6 (permalink)  
Старый 12.12.2023, 19:26
Аватар для MallSerg
Профессор
Отправить личное сообщение для MallSerg Посмотреть профиль Найти все сообщения от MallSerg
 
Регистрация: 07.03.2011
Сообщений: 1,138

Сообщение от AlekseiJK Посмотреть сообщение
Получается мне нужно чтобы на стороне searchengine.com было разрешено обращаться с запросом?
А как это делается?
Обращаться с запросом можно можно к любому ресурсу в интернете. В ответ на запрос по протоколу HTTP/HTTPS сервер может прислать ответ в этом ответе есть "служебные заголовки http" в которых может быть указано что полученный ресурс может быть использован другими доменами/источниками для своих целей. Контроль за соблюдением этой политики осуществляет браузер конечного пользователя.
подробнее https://developer.mozilla.org/ru/docs/Web/HTTP/CORS

т.е. Источник отправляет запрос, сервер его получает и принимает решение о необходимости выдачи разрешений и отправляет ответ с разрешениями (или не отправляет).
Ответить с цитированием
  #7 (permalink)  
Старый 12.12.2023, 21:13
Аватар для voraa
Профессор
Отправить личное сообщение для voraa Посмотреть профиль Найти все сообщения от voraa
 
Регистрация: 03.02.2020
Сообщений: 2,745

Тут даже проблема иногда не в том, что бы получить данные, а в том, что бы с ними потом работать.
Например мы всегда можем получить Image из другого источника. Мы можем вставить эту картинку в canvas. Но потом выполнить toDataURL из этого канвас не получится. Потому, что в нем картинка из другого источника.
Ответить с цитированием
  #8 (permalink)  
Старый 14.12.2023, 15:13
Новичок на форуме
Отправить личное сообщение для AlekseiJK Посмотреть профиль Найти все сообщения от AlekseiJK
 
Регистрация: 11.12.2023
Сообщений: 4

Сообщение от ruslan_mart Посмотреть сообщение
А что вы хотите сделать? Я открыл этот сайт, кажется, что это просто поисковая строка, которая редиректит на поиск в гугле.

Имейте ввиду, что гугл-поиск никак не получится затащить в iframe, у них запрет на открытие сайта в iframe.
прошу прощения за путанницу, адрес фейковый, для примера
Ответить с цитированием
  #9 (permalink)  
Старый 14.12.2023, 15:20
Новичок на форуме
Отправить личное сообщение для AlekseiJK Посмотреть профиль Найти все сообщения от AlekseiJK
 
Регистрация: 11.12.2023
Сообщений: 4

Итого что у меня получилось на данный момент:
Я получаю по апи отрендеренный сайт в виде строки
мне нужно его вывести в микрофронтенд на singl-spa
мое решение состоит из двух частей
1) бэкенд часть на спрингбуте (она берет на себя проверку прав пользователя, запрашивает срендеренную страничку у стороннего сервиса и выдает на фрон ее в виде строки либо в виде html страницы
2) фронтенд часть - на вью - встраивается в single-spa и отвечает за отправку запроса на бек с заголовками авторизации, получает ответ и пытается его обработать для отображения пользователю
проработав тему я для себя увидел следующие пути
- приложение на вью в котором будет iframe в который соответственно будет вставляться полученная мной страничка
- приложение на вью в которое будет вставляться страничка без iframe тупо как часть компонента
- сделать так чтобы каким-то образом single-spa не взаимодействовала с вью а напрямую скачивала и отображала страничку в качестве одного из своих микрофронтендов

с чем я столкнулся и не могу побороть
- если вставлять в iframe то только через атрибут srcdoc но тогда у встаиваемой странички меняется origin и скрипты которые в ней используются перестают правильно работать (например вместо того чтобы перейти по http://xxx.ru/abc они пытаются срутить на http://localhost/abc)
- если вставлять страницу в приложение как часть компонента, то вью оборачивает ее в свой динамический контекст и опять же скрипты на ней не работают
-через src не получается вставить, потому что нужно добавлять заголовки авторизации к гет запросу

вот думаю кто виноват и что делать
как вариант это писать свой фронт который уже будет работать с апи стороннего приложения но это нежелательно, потому что там сложная внутренняя кухня как они говорят и это будет долгая песня...

что думаете ребят?
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как заблокировать события внутри iframe JobLack Элементы интерфейса 1 04.10.2022 17:00
Якорь внутри iframe lordenas Общие вопросы Javascript 0 02.04.2018 21:56
Плавающее меню внутри iframe _Alex9_ Общие вопросы Javascript 1 22.11.2015 11:14
Получение доступа к Object.prototype внутри Iframe в IE8 dfionov Internet Explorer 12 22.07.2015 17:00
Как получить текст внутри iframe на другом домене? Alexander Majesty Events/DOM/Window 1 23.12.2009 22:10