{“translation”: "Eu tenho esse trecho de código:
let iFrame = document.getElementById('oc-editor');
if (iFrame) {
iFrame.addEventListener('load', function() {
iFrame.contentWindow.postMessage({
eventType: 'populateCode',
language: "{{this.codeLang}}",
files: [
{
"name": "file.{{this.codeLang}}",
"content": "{{this.codeLang}}"
}
]
}, "*");
});
} else {
// Pode ser necessário esperar o iframe ser carregado dinamicamente.
// Uma abordagem é usar um MutationObserver ou um intervalo de teste.
}
O problema de iFrame ser null geralmente ocorre porque o script é executado antes do iframe estar presente no DOM. Para resolver isso, garanta que seu código que acessa o iframe seja executado após o carregamento completo do DOM ou após a renderização do iframe.
Se o iframe é renderizado condicionalmente (por exemplo, dentro de um if ou de uma template condicional), você pode precisar colocar seu código dentro de um método que seja chamado somente após o iframe estar na página, ou usar um setTimeout ou um MutationObserver para esperar até que o iframe exista.
Exemplo usando setTimeout:
setTimeout(function() {
let iFrame = document.getElementById('oc-editor');
if (iFrame) {
iFrame.addEventListener('load', function() {
iFrame.contentWindow.postMessage({
eventType: 'populateCode',
language: "{{this.codeLang}}",
files: [
{
"name": "file.{{this.codeLang}}",
"content": "{{this.codeLang}}"
}
]
}, "*");
});
}
}, 1000); // Espera 1 segundo para o iframe ser carregado
Ou, se possível, adicione seu script dentro do evento onload do iframe no HTML:
<iframe id="oc-editor" ... onload="initializePostMessage()"></iframe>
<script>
function initializePostMessage() {
let iFrame = document.getElementById('oc-editor');
iFrame.contentWindow.postMessage({
eventType: 'populateCode',
language: "{{this.codeLang}}",
files: [
{
"name": "file.{{this.codeLang}}",
"content": "{{this.codeLang}}"
}
]
}, "*");
}
</script>
Resumindo, o ponto importante é garantir que o iframe exista no DOM antes de tentar acessá-lo e registrar o evento load. Você também pode verificar se a API do iframe permite carregar e manipular o conteúdo como esperado, considerando políticas de CORS e sandbox.
Para mais detalhes ou uma implementação mais específica, recomendo verificar o ciclo de vida do seu framework ou tecnologia que está usando, assim como o momento exato em que o iframe fica disponível no DOM."}