O HTML5 define vários elementos de conteúdo incorporados, que, do ponto de vista de um pássaro, parecem muito semelhantes ao ponto de serem amplamente idênticos.
Qual é a diferença real entre iframe
, embed
e object
?
Se eu quiser incorporar um arquivo HTML de um site de terceiros, qual desses elementos eu poderia usar e como eles diferem?
Respostas:
<iframe>
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 ...
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:
De dentro de um documento SVG ou HTML incorporado, você pode entrar em contato com o pai com:
Para HTML incorporado, não há como acessar o documento incorporado do pai (que eu encontrei).
<object>
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 .fonte
embed
é ideal para que o visitante siga uma cadeia de redirecionamento originada em um site que bloqueia o enquadramento. (Nós a usamos para pontapé de saída de login federado.)<object>
serão executados, mas não é possível (ou não consegui) chegar ao contexto do objeto na página pai. Portanto, scripts "internos" serão executados, scripts "externos", do ponto de vista do objeto, não podem se comunicar com o contexto dos objetos.<iframe />
o caminho a seguir. O ponto principal da postagem é que elas são todas diferentes.<embed>
ainda está na especificação: w3.org/TR/html5/embedded-content-0.html#the-embed-element , portanto, mencionar isso é justificado. Eu também achar que é mais do que um pouco engraçado que você argumentar que<embed>
está desatualizado e mencionar applets Java na frase seguinte :)Um motivo para usar
object
maisiframe
é que o objeto redimensiona o conteúdo incorporado para se ajustar às dimensões do objeto. mais notável no safari no iPhone 4s, onde a largura da tela é320px
e o html do URL incorporado pode definir dimensões maiores.fonte
Outro motivo para usar
object
o iframe é que osobject
sub-recursos (quando uma solicitação é<object>
executadaHTTP
) são consideradospassive/display
em termos deMixed content
, o que significa que é mais seguro quando você deve terMixed content
.Conteúdo misto significa que quando você tem,
https
mas seu recurso é dehttp
.Referência: https://developer.mozilla.org/en-US/docs/Web/Security/Mixed_content
fonte