Я создал инструмент, который используется в довольно популярном музыкальном магазине.
Инструмент предоставляет расширенную функцию поиска (прозрачные результаты last.fm, нет рекламы, нет хромоты, ничего страшного), и я нашел самый полезный и ненавязчивый способ отображения поиска в виде панели инструментов, использующей очень злобный iframe. , Это позволяет пользователям загружать поиск без кражи фокуса пользователя.
Не будучи особенно большим поклонником iframes, я подумал, что было бы тривиально добавить ссылку «закрыть этот кадр» (аля поиск изображений Google), позволяющую пользователям быстро и легко восстановить контроль над своим браузером.
Однако, в отличие от Google, я не знаю, где находится содержимое в iframe (только там, где оно началось, через src).
Так что теперь я нахожусь в мире XSS и всех проблем, связанных с безопасностью.
Используя Javascript, я добавил кнопки «назад» и «вперед» с объектом истории, вызываемым по ссылкам в родительском элементе (когда пользователь выполняет поиск, результаты загружаются в iframe, поэтому кнопка «назад» позволяет им вернуться назад. на основной сайт после их использования / просмотра результатов поиска).
Есть ли способ вызвать текущее местоположение в iframe и перезагрузить страницу (теперь без фреймов) в это место?
Я проверил переменные PHP $ GLOBAL / $ _ SERVER, чтобы убедиться, что мне повезет. Я понимаю, что существуют проблемы с безопасностью, но я не вижу, как эта конкретная функция будет отличаться от history.back (), где браузер выполняет сам вызов без «уведомления» моего родительского фрейма.
Я знаю, что могу извлечь местоположение src из самого iframe, но, конечно, это предполагает, что пользователь не перемещается за пределы этой страницы, и если он делает это, он не возражает против потери своего текущего местоположения и перенаправления обратно на страницу первоначально вызывается кадром (... ах ...).
Похоже, что фреймы предназначены для кражи окон без каких-либо средств для изящного "взлома" и сохранения целостности пользовательского сеанса.
Неудивительно, что люди ненавидят их. :)