Iframe существует, когда страница загружена (не динамическая)
См. Демо 1
Предполагая, что мы ссылаемся на первый (или единственный) iframe на странице:
window.frames[0]
document.getElementsByTagName('iframe')[0].contentDocument; // interchangeable
document.querySelector('iframe').contentWindow.document; // interchangeable
Сохраните любую одну из трех строк из приведенного выше примера в переменной, затем обработайте эту переменную как document
.
var iframeDoc = window.frames[0];
var iframeInput = iframeDoc.querySelector('#input2');
В двух словах: как программно получить доступ к тегу с родительской страницы на дочернюю страницу с помощью iframe. Если вмешательство пользователя связано с тем, что пользователь нажимает переключатель на дочерней странице, тогда документ iframe должен быть зарегистрирован в событии click с использованием .addEventListener()
или Свойство Onevent .
iframeDoc.addEventListener('click', eventHandler);
Обработчик событий - это функция, вызываемая при нажатии iframeDoc
.
function eventHandler(event) {
console.log(event.target.value);
}
eventHandler()
передает Объект события и затем ссылается на свойство Event.target . event.target
- это прямая ссылка на нажатый тег (например, переключатель). Свойство .value
имеет суффикс к event.target
, чтобы получить значение тега, по которому щелкнули.
Iframe динамически вставляется в DOM
См. Демо 2
Когда тег динамически добавляется в DOM, он не может быть зарегистрирован ни для какого события. Обходной путь должен использовать шаблон Делегирование событий путем регистрации тега предка (ex. Body) динамического тега (ex. Iframe). EventHandler должен "развернуть" в документ iframe из тега предка на родительской странице. См. Демо 2 для ужасных деталей.
Демо 1
Статический Iframe
Примечание: из-за мер безопасности на SO, кадры iframed. В этом демонстрационном примере iframe использует srcdoc
для приблизительного представления кода OP ( O riginal P ost).
var xFrame = window.frames[0];
xFrame.onclick = extractValue;
function extractValue(e) {
console.log(e.target.value);
}
<iframe srcdoc='<form action="/testx.php" method="POST"><input type="radio" name="gender" value="male"> Male<br><input type="radio" name="gender" value="female"> Female<br><input type="radio" name="gender" value="other"> Other<br><br><input type="submit" value="Submit"></form>'></iframe>
Демо 2
Динамический фрейм
Примечание: рабочую демонстрацию можно посмотреть на этом Плункер
/*
|| This is to simulate the iframe being dynamically inserted into the DOM.
|| This is not required for OP (Original Post) specific circumstance.
*/
document.body.insertAdjacentHTML('afterbegin', `<iframe src='test2.html'></iframe>`);
/* BEGINNING OF REQUIRED CODE */
/*
|| Register the body to the click event
|| function extractValue() is the event handler called when body is clicked.
*/
document.body.addEventListener('click', extractValue);
/* Event Handler */
/*
|| Reference the Document Object inside iframe
|| Reference the form tag inside Document Object of iframe
|| Reference all radio buttons name='gender' in the form tag
|| Reference the selected radio button
|| Log the selected radio button's value
*/
function extractValue(e) {
var xFrame = window.frames[0];
var xForm = xFrame.forms[0];
var xRads = xForm.elements['gender'];
var selected = xRads.checked;
console.log(selected.value);
}