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



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


При поиске изображений Google при удалении кадра он работает так, как вы предлагаете в данный момент, путем возврата к исходному источнику кадра. По причинам XSS определение текущего местоположения не должно быть возможным, и если бы это было так, это будет считаться ошибкой и исправлено в последующих исправлениях браузера, поэтому, возможно, не стоит полагаться на такую причуду, если таковая существует. Тем не менее, было бы неплохо сделать элегантный выход, не раскрывая своего местоположения. Это может быть что-то, что вы можете предложить группе HTML5.
Не то чтобы это было бы слишком полезно, но самое близкое, что вы можете сделать, - это определить, действительно ли кто-то покинул исходную страницу исходного кадра. Когда вы перемещаетесь по фрейму, объект истории сохраняет записи, и если исходная длина вашей истории при загрузке страницы больше, чем длина истории, когда кто-то нажимает «Выйти из этого фрейма ...», то вы знаете, что они просматривали во фрейме .
Я благодарен вам (hal10001) и Заку, что нашли время ответить. Похоже, я отстой (как я и подозревал) из-за проблем с безопасностью xss.
Полагаю, я мог бы просто обернуть содержимое все в прокси на основе php, но это явно войдет в жуткую зону, не говоря уже о дополнительной задержке и тому подобном.
Я буду продолжать развивать эту идею, если я действительно наткнусь на что-то разумное и полезное, но до тех пор, я думаю, я просто буду использовать немного менее дружелюбный подход: продвигать исходный кадр и стирать их текущее местоположение (а если они этого не делают). как будто я могу вернуться к ситуации с iframe / панелью инструментов.
Еще раз спасибо!
Не уверен, правильно ли я понял. Вы контролируете основной документ, вы показываете внешние документы в iframe и хотите, чтобы основной документ загружал все, что находится в iframe, в качестве нового основного документа? А у вас нет сотрудничества из документов в iframe?