Я знаю, что мы можем передать переменную javascript из iframe в родительский фрейм следующим образом:
Если родитель и iframe находятся в одном домене, мы можем вызвать функцию родительского окна:
код фрейма:
window.postMe = "postMe value here";
window.parent.myFunction(postMe);
В родительском окне мы можем определить такую функцию:
function myFunction(postMe) {
((console&&console.info)||alert)("postMe= " + postMe);
}
И приведенный выше код правильно регистрирует значение «postMe».
Но у меня вопрос, как изменить этот код, чтобы передать «postMe» от родителя к iframe?



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Если вы хотите продолжить использовать myFunction для родителя, вы можете сделать так, чтобы родительская функция принимала обратный вызов, переданный дочерним элементом:
window.postMe = "postMe value here";
window.parent.myFunction(postMe, (response) => {
console.info(response);
});
function myFunction(postMe, callback) {
const val = "postMe= " + postMe;
// do something with val in parent:
((console&&console.info)||alert)(val);
// do something with val in child:
callback(val);
}
См. здесь живую демонстрацию (не может быть встроен в виде фрагмента стека из-за проблем с песочницей):
https://jsfiddle.net/kc24onbq/
Для односторонней связи от родителя к дочернему, получите доступ к contentWindow iframe от родителя:
// child
function childFn(val) {
console.info(val);
}
// parent
iFrameElement.contentWindow.childFn('foo');
Первая часть — это код, который должен быть в коде iframe, а второй — в родительском, верно?
Подождите... Я хочу передать postMe от родителя к iframe, верно? Поэтому мне нужна postMe как переменная внутри родительского кода... не в коде iframe... поправьте меня, если я ошибаюсь...
Вы спрашивали, как изменить существующий код, который имел postMe в iframe, и отправлял информацию родителю, что я и скопировал. Вы можете отправить ребенку что угодно, посмотрите на строку const val — все, что вы туда поместите, будет отправлено в iframe.
Спасибо... ваш код отлично работает... Теперь я собираюсь опубликовать еще один вопрос по моей проблеме...
Не могли бы вы взглянуть на это обсуждение здесь:
к сожалению, я не могу заставить его работать (первый код), не могли бы вы объяснить это подробнее?