¿Habría algún tipo de problema o incompatibilidad de especificaciones causado por llamar
// assume iframe.contentWindow was checked beforehand and is defined iframe.contentWindow.document.open(); iframe.contentWindow.document.close(); dentro de la función de carga de onload ?
p.ej
iframe.onload = () => { // ... // assume iframe.contentWindow was checked beforehand and is defined iframe.contentWindow.document.open(); iframe.contentWindow.document.close(); } El trasfondo de esto es que al crear un iframe amigable, quiero obtener una referencia a la ventana del iframe y hacer ciertas operaciones sin escribir o con un mínimo de escritura en el iframe de antemano usando document.write() y sin tener que usar setTimeout (ver https ://bugs.chromium.org/p/chromium/issues/detail?id=978325 y https://bugs.chromium.org/p/chromium/issues/detail?id=961428 para saber por qué sería necesario setTimeout )
El problema es que sin llamar a open o cuando se llama antes de la función de onload , la location del iframe se establece en about:blank (consulte https://html.spec.whatwg.org/multipage/dynamic-markup-insertion.html# paso 13 de apertura del flujo de entrada ). Esto también se puede resolver agregando un setTimeout después de abrir el documento (fuera de onload ) a costa del rendimiento, lo que me gustaría evitar.
La solución que implica llamar a open y close dentro de la función onload funciona en Chrome, Firefox y Safari, pero JSDom considera que contentDocument es null y que el iframe en sí mismo no tiene hijos cuando se usa este método (después de simular manualmente una llamada a onload , que es un problema separado, pero podría estar relacionado con el comportamiento)