Изящное закрытие фрейма (панели инструментов) вокруг iframe

Я создал инструмент, который используется в довольно популярном музыкальном магазине.

Инструмент предоставляет расширенную функцию поиска (прозрачные результаты last.fm, без рекламы, без хромоты, ничего жуткого), и я обнаружил, что самый полезный и ненавязчивый способ отображения поиска - это панель инструментов с использованием сильно злонамеренного iframe. Это позволяет пользователям загружать поиск, не отвлекая внимание пользователей.

Не будучи особенно большим поклонником iframe, я подумал, что было бы тривиально добавить ссылку «закрыть этот фрейм» (как поиск изображений в Google), позволяющую пользователям быстро и легко восстановить контроль над своим браузером.

Однако, в отличие от Google, я не знаю, где находится контент в iframe (только там, где он начался, через src).

Итак, теперь я нахожусь в мире XSS и всех проблем, связанных с безопасностью.

Используя Javascript, я добавил кнопки «назад» и «вперед» с объектом истории, вызываемым из ссылок в родительском элементе (когда пользователь выполняет поиск, результаты загружаются в iframe, поэтому кнопка «Назад» позволяет им вернуться к основному сайт после того, как они завершили использование / просмотр результатов поиска).

Есть ли способ вызвать текущее местоположение в iframe и перезагрузить страницу (теперь без фреймов) в это место?

Я проверил переменные PHP $ GLOBAL / $ _ SERVER, чтобы увидеть, что мне может повезти. Я понимаю, что есть проблемы с безопасностью, но я не понимаю, чем эта конкретная функция будет отличаться от history.back (), где браузер выполняет вызов сам, не «уведомляя» родительский фрейм.

Я знаю, что могу получить местоположение src из самого iframe, но, конечно, это предполагает, что пользователь не выходит за пределы этой страницы, и если они это сделают, они не возражают потерять свое текущее местоположение и быть перенаправлены обратно на страницу, первоначально вызванную рама (... ах ...).

Кажется, что фреймы предназначены для кражи окон без каких-либо средств для изящного «выхода» и сохранения целостности сеанса пользователя.

Неудивительно, что люди их ненавидят. :)

Не уверен, правильно ли я понял. Вы контролируете основной документ, вы показываете внешние документы в iframe и хотите, чтобы основной документ загружал все, что находится в iframe, в качестве нового основного документа? А у вас нет сотрудничества из документов в iframe?

Jim 27.09.2008 06:10
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
Улучшение производительности загрузки с помощью Google Tag Manager и атрибута Defer
В настоящее время производительность загрузки веб-сайта имеет решающее значение не только для удобства пользователей, но и для ранжирования в...
Безумие обратных вызовов в javascript [JS]
Безумие обратных вызовов в javascript [JS]
Здравствуйте! Юный падаван 🚀. Присоединяйся ко мне, чтобы разобраться в одной из самых запутанных концепций, когда вы начинаете изучать мир...
Система управления парковками с использованием HTML, CSS и JavaScript
Система управления парковками с использованием HTML, CSS и JavaScript
Веб-сайт по управлению парковками был создан с использованием HTML, CSS и JavaScript. Это простой сайт, ничего вычурного. Основная цель -...
JavaScript Вопросы с множественным выбором и ответы
JavaScript Вопросы с множественным выбором и ответы
Если вы ищете платформу, которая предоставляет вам бесплатный тест JavaScript MCQ (Multiple Choice Questions With Answers) для оценки ваших знаний,...
5
1
987
3

Ответы 3

При поиске изображений Google при удалении кадра он работает так, как вы предлагаете в данный момент, путем возврата к исходному источнику кадра. По причинам XSS определение текущего местоположения не должно быть возможным, и если бы это было так, это будет считаться ошибкой и исправлено в последующих исправлениях браузера, поэтому, возможно, не стоит полагаться на такую ​​причуду, если таковая существует. Тем не менее, было бы неплохо сделать элегантный выход, не раскрывая своего местоположения. Это может быть что-то, что вы можете предложить группе HTML5.

Не то чтобы это было бы слишком полезно, но самое близкое, что вы можете сделать, - это определить, действительно ли кто-то покинул исходную страницу исходного кадра. Когда вы перемещаетесь по фрейму, объект истории сохраняет записи, и если исходная длина вашей истории при загрузке страницы больше, чем длина истории, когда кто-то нажимает «Выйти из этого фрейма ...», то вы знаете, что они просматривали во фрейме .

Я благодарен вам (hal10001) и Заку, что нашли время ответить. Похоже, я отстой (как я и подозревал) из-за проблем с безопасностью xss.

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

Я буду продолжать развивать эту идею, если я действительно наткнусь на что-то разумное и полезное, но до тех пор, я думаю, я просто буду использовать немного менее дружелюбный подход: продвигать исходный кадр и стирать их текущее местоположение (а если они этого не делают). как будто я могу вернуться к ситуации с iframe / панелью инструментов.

Еще раз спасибо!

Другие вопросы по теме