#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. Эта справочная страница прискорбно скудна… хаха.