Já vi muitos fóruns que sugerem a tag Object como um substituto para o IFrame, o que provavelmente funciona na maioria dos casos.
Por exemplo, eu tinha um PDF sendo exibido em um IFrame (porque havia outras coisas que precisávamos mostrar na página além de apenas o PDF) e consegui exibi-lo corretamente usando Object.
O que era:
<iframe id="confirmed_pdf" class="current_pdf" src="/prescriptions/show_pdf?id=123" height="570" width="480"></iframe>
Passou a ser:
<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>
Mas Object não era um substituto adequado para preencher o requisito de imprimir APENAS a parte PDF da página.
Um IFrame é como sua própria janela dentro da página (uma janela dentro de uma janela, basicamente), e depois de obter o objeto de janela, você pode chamar .print () nele, como:
jQuery("#confirmed_pdf").contentWindow.print();
O IFrame tem uma propriedade contentWindow, que torna a impressão apenas dessa parte possível. O objeto não tem uma propriedade contentWindow, portanto, não há como imprimir apenas a seção da página.
Então, parece que se você estiver apenas usando IFrame para exibir algo, há outras tags como Object que podem ser usadas no lugar. Mas se você precisar interagir com o conteúdo do IFrame de determinadas maneiras, o IFrame pode ser necessário.