Событие нажатия кнопки IFrame

#javascript #iframe

Вопрос:

Я пытаюсь прикрепить список событий к событию «щелчок» кнопки на странице в IFrame. Страница в iframe принадлежит тому же домену, что и родительское окно.

 window.frames["iframe_Id"].document.getElementById("button_id").addEventListener("click",functionToRun,false);
 

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

Примечание: Я нашел множество примеров добавления события click ко всему Iframe, но я не уверен, что оно одинаково работает для кнопок внутри Iframe.

Комментарии:

1. Не работает в каком браузере (браузерах)? Документы с рамками могут быть сложными.

2. Хром. Но я могу получить компонент «innerHTML» элементов в Iframe, когда я тестирую, так что моя интуиция говорит, что это не браузер, а скорее то, что я делаю.

3. Интересный. Это предполагает, что проблема заключается не в нахождении кнопки (поскольку текущие ответы пытаются исправить), а в назначении/выполнении обработчика…

4. Никогда не помешает дважды проверить правильность написания functionToRun объявления и ссылки в этот момент.; -)

Ответ №1:

Использование jQuery:

 $("#iframe_Id").contents("#button_id").click(functionToRun);
 

Или без jQuery:

 document.getElementById("iframe_Id").contentWindow.document.getElementById("button_id").addEventListener("click", functionToRun, false);
 

Это будет работать только в том случае, если iframe соответствует той же политике происхождения.

Ответ №2:

window.frames-это объект, подобный массиву, поэтому доступ к его элементам возможен только с помощью индексов.

Вы должны просмотреть их и проверить их идентификатор, например:

 var frame; for(i = 0; i < frames.length; i  ) {
    frame = frames[i];
    if (frame.id === 'iframe_id') {
         frame.document
              .getElementById("button_id")
              .addEventListener("click",functionToRun,false);
    }
}
 

Ответ №3:

Вы пробовали выполнить событие в фазе «захват» или «пузырение»?

 document.getElementById("iframe_Id")
 .document.addEventListener("click", functionToRun, true);
 

Обратите внимание на true вместо false в качестве последнего параметра.

Комментарии:

1. Да. Тот же результат. Я могу получить данные внутри элемента <кнопка>, но я предполагаю, что проблема должна быть связана с регистрацией события. Я все еще просматриваю его.

Ответ №4:

 window.frames["iframe_Id"].contentWindow.document.getElementById("button_id").addEventListener("click",functionToRun,false);

                              ^
 

Свойство contentWindow.

Из элемента iframe DOM скрипты могут получить доступ к объекту окна включенной HTML-страницы с помощью свойства contentWindow.

Комментарии:

1. Эта справочная страница прискорбно скудна… хаха.