/ / Як би я міг виявити події onclick, зовнішні для певного iframe? - javascript, html, css, iframe, події

Як я маю намір виявляти події onclick, що не входять до певної iframe? - javascript, html, css, iframe, події

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

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

Якщо я запускаю цей моніторинг onclick - мені також цікаво, чи він би впорався все кліки - наприклад, якщо в рамці A є кількаonclick події, встановлені на конкретних елементах - я впевнений, що я також можу зафіксувати ці кліки? Я згадую про це, тому що мій поточний спосіб вирішення виявляється помилковим (рамки A, B, C повідомляють про своє натискання тіла на кадр D) - певні клацання не викликають onclick тіла.

Заздалегідь дякую, хлопці. Будь ласка, майте на увазі, що видалення iframes не є реалістичним на даний момент проекту.

Відповіді:

1 для відповіді № 1

Події не киплять за межі рамки iframeбо це може становити ризики для безпеки. Уявіть, що фішинг-сайт, який вбудував веб-сайт банку у iframe, і встановив обробник onkeypress, щоб ввести будь-який пароль, який користувач ввів у вбудований кадр.

Ваша найкраща ставка - це, ймовірно, щоб зовнішні рамки встановили обробники кузовів, як це робите, а також, можливо, також встановити оброблювачі для завантаження, щоб він міг перевстановити обробник кузова за необхідності.

Так, обробники подій, які скасовують бульбашку на події натискання, приховають його від обробника подій тіла.


1 для відповіді № 2

покладіть об'єкт панелі YUI на зовнішній документ.

тоді замість показу iframe X, покажіть панель YUI з модальним режимом, а на вміст панелі поставте <iframe ... src = x>

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


0 для відповіді № 3

Ви не можете зробити це надійно, враховуючиобмеження iframe. Обхідних шляхів може бути багато, але не впевнений, наскільки підходить для ваших потреб. може бути, ви можете пінгувати бекенд за допомогою ajax, і це спричинить зміни? Або, використовуючи дві версії, одну з відкритим дочірнім і одну закриту, і тоді ви можете просто маніпулювати батьківським приховуванням / показуванням. Або замініть iframe X на щось інше, не iframe. тощо Вони можуть бути неможливим рішенням для ваших конкретних потреб. Але просто ідеї.