Подтвердить что ты не робот

Есть ли способ предотвратить iframe от перенаправления родительского окна, но таким образом, что перенаправление верхнего уровня все еще работает внутри самого iframe?

Итак, я читал о HTML5 sandbox свойстве, и я понимаю, что если я хочу, чтобы iframe перенаправлял родительское окно, я могу использовать sandbox свойство, оставляющее allow-top-navigation вне. Однако, когда это сделано, если iframe изначально полагался на перенаправление верхнего уровня, то на его месте происходит то, что он перенаправляется на пустую страницу, эффективно нарушая навигацию.

Могу ли я запретить iframe переделывать родительское окно, сохраняя при этом перенаправления верхнего уровня, только позволяя им работать в контексте iframe вместо верхнего уровня?

Изменить: для контекста я работаю с третьим лицом, а его страница имеет форму с целевой _top. Если iframe изолирован песочницей, то при отправке формы пользователи получают пустую страницу, если она не изолирована, вся страница перенаправляется. Я ищу что-то, что позволило бы отправить форму и показать результат внутри самого iframe.

4b9b3361

Ответ 1

С HTML5 добавлен атрибут iframe sandbox.

На момент написания этой статьи работает в Chrome, Safari, Firefox и последних версиях IE и Opera, но в значительной степени делает то, что вы хотите

Позволяет обрабатывать содержимое iframe как имеющее тот же источник, что и содержащий документ

<iframe src="url" sandbox="allow-same-origin"></iframe>

Совместимость браузера enter image description here


Некоторые полезные ссылки

Ответ 2

Вы можете использовать свойство onbeforeunload и определить, хотите ли вы переадресовать или нет.

Вот страница документов для него

В основном я бы попробовал следующее:

  • Создайте функцию, которая добавляет атрибут sandbox ко всему, просто оставляя allow-top-navigation, в iframe
  • Привязать функцию к свойству onbeforeunload iframe, который вызывает функцию, которая добавляет атрибут sandbox (не забудьте ничего не возвращать, потому что всплывающее диалоговое окно)

Это должно работать, потому что запрос сначала выполняется в iframe, а затем мы можем помешать переносу в окно верхнего уровня.

Еще одна вещь, которую вы должны проверить, - если вы, возможно, оставили параметр allow-forms, который может вызывать то, что вы описываете.

Пожалуйста, дайте мне знать, если это сработало.