<iframe>
O elemento iframe representa um contexto de navegação aninhado. Padrão HTML 5 - "O <iframe>
elemento"
Usado principalmente para incluir recursos de outros domínios ou subdomínios, mas também pode ser usado para incluir conteúdo do mesmo domínio. O ponto <iframe>
forte é que o código incorporado é "ativo" e pode se comunicar com o documento pai.
<embed>
Padronizado no HTML 5, antes disso era uma tag não padrão, que reconhecidamente foi implementada por todos os principais navegadores. O comportamento anterior ao HTML 5 pode variar ...
O elemento embed fornece um ponto de integração para um aplicativo externo (normalmente não HTML) ou um conteúdo interativo. ( Padrão HTML 5 - "O <embed>
elemento" )
Usado para incorporar conteúdo para plugins de navegador. Exceções a isso são SVG e HTML que são tratadas de maneira diferente de acordo com o padrão.
Os detalhes do que pode e não pode ser feito com o conteúdo incorporado dependem do plug-in do navegador em questão. Mas para o SVG, você pode acessar o documento SVG incorporado do pai com algo como:
svg = document.getElementById("parent_id").getSVGDocument();
De dentro de um documento SVG ou HTML incorporado, você pode entrar em contato com o pai com:
parent = window.parent.document;
Para HTML incorporado, não há como acessar o documento incorporado do pai (que eu encontrei).
<object>
O <object>
elemento pode representar um recurso externo que, dependendo do tipo do recurso, será tratado como uma imagem, como um contexto de navegação aninhado ou como um recurso externo a ser processado por um plug-in. ( Padrão HTML 5 - "O <object>
elemento" )
Conclusão
A menos que você esteja incorporando SVG ou algo estático, provavelmente é o melhor uso <iframe>
. Para incluir o uso de SVG <embed>
(se bem me lembro <object>
, não o deixarei escrever †). Sinceramente, não sei por que você usaria, a <object>
menos que seja para navegadores mais antigos ou flash (com os quais não trabalho).
† Como apontado nos comentários abaixo; os scripts <object>
serão executados, mas os contextos pai e filho não podem se comunicar diretamente. Com <embed>
você pode obter o contexto da criança dos pais e vice-versa. Isso significa que você pode usar scripts no pai para manipular o filho etc. Essa parte não é possível com <object>
ou <iframe>
onde você teria que configurar outro mecanismo, como a API postMessage do JavaScript .