He visto muchos foros que sugieren la etiqueta Object como reemplazo de IFrame, que probablemente funcione en la mayoría de los casos.
Por ejemplo, tenía un PDF que se mostraba en un IFrame (porque había otras cosas que debemos mostrar en la página además del PDF) y pude hacer que se mostrara bien usando Object.
Lo que era:
<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>
Convirtió:
<object id="confirmed_pdf" class="current_pdf" data="/prescriptions/show_pdf?id=123" type="application/pdf" height="570" width="480">
<p>[Show this message if displaying the PDF did not work]</p>
</object>
Pero Object no fue un reemplazo adecuado para cumplir con el requisito de poder imprimir SOLO la parte PDF de la página.
Un IFrame es como su propia ventana dentro de la página (una ventana dentro de una ventana, básicamente), y una vez que obtiene el objeto de la ventana, puede llamar a .print () en él, como:
jQuery("#confirmed_pdf").contentWindow.print();
IFrame tiene una propiedad contentWindow, eso es lo que hace posible imprimir solo esa parte. El objeto no tiene una propiedad contentWindow, por lo que no hay forma de imprimir solo la sección de la página.
Entonces, parece que si solo está usando IFrame para mostrar algo, hay otras etiquetas como Object que se pueden usar en su lugar. Pero si necesita interactuar con el contenido del IFrame de ciertas formas, entonces el IFrame puede ser necesario.