Изящно закрывая рамку (панель инструментов) вокруг фрейма - PullRequest
5 голосов
/ 26 сентября 2008

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

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

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

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

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

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

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

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

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

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

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

Ответы [ 3 ]

2 голосов
/ 26 сентября 2008

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

0 голосов
/ 27 сентября 2008

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

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

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

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

0 голосов
/ 27 сентября 2008

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...