Categories: (X)HTMLtodas

Inserindo página HTML em uma página HTML

…ou, como simular iframe em documentos XHTML Strict.

Esta matéria é uma tradução de: Insert HTML page into another HTML page de autoria de Aleksandar Vacic

Uma noite destas eu precisei adicionar "ads" do kayak.com na minha página related to traveling. Os "ads" que eu usei são um conjunto de pequenos trechos de código oferecendo funcionalidades que permitem fazer buscas diretamente nos bancos de dados da kayak.com. Uma coisa muito bem concebida.

Lamentavelmente os códigos dos "ads" foram escritos à moda ultrapassada priorizando a renderização em modo kirks, e pior ainda – escritos com uso de tabelas aninhadas e "tag soup" diretamente dentro do documento – uma solução diferente da adotada pelo Google AdSense. Mas, quando as regras de estilo do meu site foram aplicadas ao código dos "ads", aconteceu o desastre.
Felizmente, os "ads" abrem em uma nova janela, então eu simplesmente criei um iframe para renderizar os "ads" na página. Grande solução…não fosse o detalhe que minhas páginas são codificadas em XHTML 1.0 Strict, que não admite iframe. Que beleza.

O caminho correto para se incluir uma página HTML dentro de outra página é através do uso do elemento object. Este é o elemento destinado a inserir objetos externos em uma página bem estruturada. O modo padrão de codificar o elemento object é pelo uso do MIME type e da URL do objeto a inserir. Naturalmente, isto não funciona no IE6 (nem no IE7) e eu tive que sair a procura do valor do infame clsid para text/html.

Depois de tentar por 10 minutos eu não consegui encontrar o valor e então resolvi abrir o RegEdit, fui ao menu de clsid e lá encontrei o que estava procurando. Aí ficou fácil:

<!--[if IE]>
<object classid="clsid:25336920-03F9-11CF-8FD0-00AA00686F13" data="http://www.maujor.com/">
<p>conteúdo alternativo para tecnologias que não suportam OBJECT</p>
</object>
<![endif]-->
<!--[if !IE]> <-->
<object type="text/html" data="http://www.maujor.com/">
<p>conteúdo alternativo para tecnologias que não suportam OBJECT</p>
</object>
<!--> <![endif]-->

Isto funcionou beleza, mas nos IE (6 e 7) apareceu uma borda horrível e barra de rolagem, mesmo sendo a página incluida de dimensões menores que os atributos width e height definidos para o elemento object. Para solucionar o problema eu especifiquei a seguinte regra de estilo na página a incluir:

...
<body style="border:0;overflow:visible">
....

Com esta técnica, você integra de forma elegante um documento .html (ou .asp ou .php ou qualquer outro) em uma página web.

Ver uma página que emprega esta técnica testada nos IE6+, FFox, Safari, Chrome e Opera. Examine o código fonte da página.

Maujor

Exerci o magistério paralelamente a minha carreira profissional por toda uma vida e ao longo destes trinta anos aprendi tanto quanto ensinei. Sou um apaixonado por Web Standards e desenvolvo o site de tutoriais CSS para Web Design.

View Comments

  • Uau, fantástico, conhecimento é rei...
    Não sabia que o tag object faria isso...

    Parabéns !!!

  • O ADSENSE PROÍBE USAR O SITE COM CONTEÚDO DE ANÚNCIOS DENTRO DE UM INFRAME, E NESSE CASO O GOOGLE TAMBÉM PROÍBE USAR SITE HTML DENTRO DE OUTRO SITE HTML?

    SE USAR MEU SITE DENTRO DENTRO DESSE MÉTODO É IGUAL USAR UM IFRAME?

  • VALEU!!!! o meu funcionou com Iframe no iE 7, mas tive de usar o

    nas páginas que eu inclui!

    Muito Obrigado!

  • Excelente dica, ajudou muito.

    Mas não consigo tirar a barra de rolagem. Quer dizer ela aparece apenas no Chrome .. em outras navegadores não. Alguém sabe o que fazer ??

  • Olá
    alguém sabe se tem como tornar esta tag ajustável ao conteúdo, pois queria retirar as barras de rolagem dele, porém os conteúdos varião de tamanho :(

  • Muito obrigada! Me deu uma luz agora, não sabia que podia utilizar a tag desta forma, valeu mesmo, muito sucesso para você e que continue compartilhando seu conhecimento com a gente. Parabéns!

  • Kara!!! muito obrigado. Seu codigo funcionou aqui perfeitamente.

  • Cara no firefox funcionou mas no Chato do IE9 Apareceu a mensagem: onteúdo alternativo para tecnologias que não suportam OBJECT

    Por que????Gostaria de saber ;)

Share
Published by
Maujor

Recent Posts

Teste seu conhecimento #20

Em 2006 comecei a publicar nesse blog uma série de desafios CSS que consistiam em…

7 anos ago

Teste seu conhecimento #19

Há muito tempo que eu não publico um "Teste seu conhecimento". Esta semana, revendo algumas…

9 anos ago

JavaScript bubbling e capturing

Introdução Elementos da marcação HTML podem ser aninhados uns dentro de outros, criando-se uma cadeia…

10 anos ago

HTML5 – W3C versus WHATWG

HTML5? Web universal? É comum eu me deparar com dúvidas sobre a HTML5 não só…

10 anos ago

Seria esse o futuro das imagens responsivas?

Quem é Tab Atkins Jr? Tab Atkins Jr, um desenvolvedor americano, trabalhou durante muitos anos…

10 anos ago

BrazilJS Conf 2013

Pessoal, a BrazilJS Conf 2013 disponibilizou para o Maujor cupons de desconto para serem oferecidos…

11 anos ago