Если содержимое iframe - это другой домен, тогда вы весьма ограничены в количестве выполняемых JavaScript.Вы можете узнать больше о том, почему в этом посте здесь https://www.cakemail.com/blog/the-iframe-cross-domain-policy-problem/.
Я лично нашел, что использование postMessage API - полезный обходной путь, учитывая правильный вариант использования (например, вы должны иметь возможностькод, размещенный поставщиком содержимого iframe для обработки сообщений.Который, как правило, подходит для моего варианта использования с интеграцией партнеров с другими компаниями-разработчиками программного обеспечения.
Пример такого подхода можно найти здесь: https://codepen.io/wickdninja/pen/oygwNL?editors=1111
// parent js
console.log('1 - parent');
var iframe = document.getElementById('iframe');
iframe.addEventListener("load", function(event){
console.log('3 - parent on iframe load');
iframe.contentWindow.postMessage('testing','*')
}, false);
iframe.contentWindow.addEventListener('message', function(event){
console.log('recieved message event from child')
console.log(event.data);
});
// parent html
<h1>Parent Frame</h1>
<iframe id="iframe" src="https://s.codepen.io/wickdninja/debug/GGgEKE/DqkDdKzORQXk"></iframe>
// child js
console.log('2 - child');
window.addEventListener('message', function(event){
console.log('4 - on child message')
console.log('child postMessage with * origin')
}, false);
window.parent.postMessage('test from child', '*')
// child html
<h1>Child Frame</h1>
// console output from parent
"1 - parent"
"3 - parent on iframe load"
"recieved message event from child"
"testing"