Как бы я обнаружил события клика, внешние по отношению к конкретному фрейму? - PullRequest
1 голос
/ 08 октября 2009

У меня есть страница с множеством разных фреймов (A, B, C, D) - все они полностью видны в любое время. Вместе они составляют различные части пользовательского интерфейса моего приложения. Один из этих iframe, iframe D - содержит другой, меньший iframe (iframe X), который иногда отображается пользователем. Он должен автоматически исчезать всякий раз, когда пользователь нажимает за его пределами. Я могу легко справиться с этим изнутри iframe D, поместив щелчок мышью на теле. Если я на самом деле обнаруживаю щелчок в теле iframe D - это означает, что он не щелкает в iframe X, поэтому я могу скрыть iframe X с помощью CSS. Нет проблем.

Проблема в других фреймах - A, B и C. Если пользователь щелкает в них, я хочу также скрыть ифрейм X. В настоящее время у меня это работает - но не хорошо. Для каждого из этих iframe (A, B, C) у меня есть код, который будет сообщать щелчки тела в iframe D. Мне не нравится этот подход, потому что все iframe A, B, C знают о iframe X - там действительно должно быть в этом нет необходимости, и это просто добавляет к файлам, которые мне нужно изменить, чтобы поддержать функцию, предлагаемую iframe X. Есть ли способ справиться с обнаружением внешних событий onclick изнутри iframe D? Это оставит iframe X показывает / скрывает логику внутри iframe D, что значительно облегчает перемещение кода.

Если я включу этот мониторинг онкликов - мне также интересно, будет ли он обрабатывать все клики - например, если в iframe A для определенных элементов установлены какие-либо события onclick - я обязательно поймаю эти клики? Я упоминаю об этом, потому что мой текущий обходной путь кажется некорректным (iframes A, B, C сообщают о своих щелчках тела на iframe D) - некоторые щелчки не вызывают щелчок тела.

Заранее спасибо, ребята. Имейте в виду, однако, что удаление iframes нереально на данном этапе проекта.

Ответы [ 3 ]

1 голос
/ 08 октября 2009

События не выходят за пределы границ iframe, потому что это может создать угрозу безопасности. Представьте себе фишинговый сайт, который встроил веб-сайт банка в iframe и установил обработчик onkeypress для регистрации любого пароля, введенного пользователем во встроенный фрейм.

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

Да, обработчики событий, которые отменяют всплывающее уведомление о событии щелчка, скрывают его от обработчика событий тела.

1 голос
/ 08 октября 2009

Поместить объект панели YUI на внешний документ.

затем вместо отображения iframe X отобразите панель YUI с модальным режимом, а на содержимое панели поставьте

когда вы вызываете parent.panel.show (), он будет отображаться во всех фреймах, и его легко можно разрешить любому щелчку за пределами панели, чтобы закрыть его.

0 голосов
/ 12 января 2014

Вы не можете сделать это надежным способом, учитывая ограничения iframe. Там может быть много обходных путей, но не уверен, насколько подходит для ваших нужд. Может быть, вы могли бы пинговать бэкэнд по ajax, и это вызвало бы изменение? Или, используя две версии: открытую дочернюю и одну закрытую, а затем вы можете просто манипулировать родительским скрытием / показом. Или замените iframe X на что-то другое, а не iframe. и т.п. Они не могут быть реальным решением для ваших конкретных потребностей. Но только идеи.

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