Para mim, iframes são puro mal (bem, talvez não tão puros). Eles parecem causar muitos problemas. Sim, todo o seu site será carregado uma vez e você poderá carregar apenas uma única página. Mas as pessoas inventaram o AJAX para esse propósito.
Um dos maiores problemas que encontrei iframe
foi que não consegui colar um link para uma das subpáginas, porque o URL nunca mudou (sim, sei que há uma solução alternativa para isso). Em segundo lugar, os mecanismos de pesquisa da web podem ter problemas para indexar esses sites corretamente.
Às vezes, a acessibilidade desses sites é pior e alguns navegadores podem até exibi-los indevidamente.
Existem maneiras melhores de projetar o layout sem (i) quadros. Todos os dias vejo alguém fazendo perguntas ao SO, como "Como acessar iframe com jQuery?".
Então, quais são as vantagens dos iframes? Que razão pode haver para ainda usá-los? Eu só gostaria de saber por quê :)
(já que não é uma pergunta real, é um CW)
Respostas:
Posso pensar em 2 razões (no momento) pelas quais as pessoas ainda usariam iframes em vez de AJAX:
1) Iframes contornam a política de origem entre domínios (imagens, scripts e estilos não). Isso pode ser útil para obter sites / conteúdo de outros nomes de domínio com relativa segurança. Basicamente, isso tem a vantagem de ser capaz de mostrar dados visualmente de outros domínios sem permitir que eles percorram toda a sua página com acesso ilimitado (como algo como JSONP seria capaz de fazer).
2) Você pode carregar vários tipos de recursos de dentro de um iframe, não apenas certos tipos MIME (você está relativamente limitado a application / javascript, application / x-javascript, text / css, text / xml, image / png, image / jpeg, imagem / gif com scripts, XHR, imagens e fontes). Por exemplo, se eu quiser mostrar a você um PDF, posso abrir um iframe e deixar o plugin Adobe Reader mostrar esse arquivo. Além disso, no mesmo domínio, se eu quiser canalizar um script, estilo e imagem todos juntos (embutido na página, a imagem teria que ser URI de dados), posso fazer isso com um iframe (e se estiver no mesmo domínio, porta e protocolo, também posso acessá-lo com JavaScript).
Você sabia que o Gmail é um conjunto de iframes? A parte visível é apenas um posicionamento inteligente. Além disso, muitas implementações OAuth (Twitter, Facebook, Google, Yahoo!) geralmente usam iframes para associar um usuário em seu domínio a uma URL de autenticação bem-sucedida (para depois que o usuário fizer login).
fonte
<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
IFRAMEs são usados para incorporar e isolar conteúdo de terceiros em um site.
A maioria das soluções de publicidade na web é baseada em iframes - porque eles fornecem segurança (política de domínio cruzado) e retângulo isolado na tela que pode ser totalmente gerenciado por conteúdo e script de terceiros (um caso de uso comum são os anúncios).
Outro uso moderno de IFRAMES é o gerenciamento do histórico (solução alternativa comum do botão Voltar) de aplicativos AJAX.
FRAMEs são versões ruins de IFRAMES. Seu uso está diminuindo.
fonte
Se um usuário tiver o javascript desabilitado, os iframes funcionarão, mas o ajax não. Isso não está fora de questão, considerando que as pessoas usam coisas como o NoScript .
fonte
<form>
postando em destinos).XMLHttpRequest
.Eu os uso em sites de ajax, quando preciso carregar arquivos sem recarregar a página.
fonte
Ainda vejo iframes sendo usados em grandes corporações, onde fornecem um único sinal no qual injeta informações de cabeçalho sobre o usuário autenticado que são então passadas, por meio de um iframe, para os aplicativos reais. Como o "portal" em torno do iframe lida com todos os detalhes de autenticação específicos, esses aplicativos por trás dele não precisam ter cada uma implementação para ele, tornando as coisas mais fáceis para a equipe de desenvolvimento e tendo um único lugar para monitorar e ajustar os detalhes de autenticação de usuários.
fonte
Existem muitos motivos técnicos para usá-los (especialmente o problema de segurança mencionado por Dan Beam).
O que você não deve fazer é usar iframes “como frames”, fazendo navegação para novas páginas atualizando apenas o iframe. Como você disse, isso evita que a navegação seja marcada / vinculável, respondendo aos botões de navegação normais e fornecendo recursos de link úteis, como abrir em uma nova guia.
Mas isso não é peculiar aos iframes. Você pode ver mais e mais páginas onde a navegação é feita, buscando novo conteúdo
XMLHttpRequest
e gravando-o nas div's de conteúdo principalinnerHTML
. Freqüentemente, isso é feito com jQueryload()
e animações deslizantes inteligentes. Isso quebra a navegação tão mal quanto iframe-usado-como-quadro, ou até mesmo framesets da velha escola. É uma pena que muitos autores da web estejam usando essa tática acreditando que seja uma metodologia de design da web supermoderna, quando na verdade é apenas uma nova pele nos desprezados framesets de ontem.Você pode contornar isso em ambos os casos, mas isso significa que você precisa armazenar um viewstate na
#
parte do identificador de fragmento e suportar a navegação hash adequada, o que não é trivial. Mesmo assim, você ainda tem problemas com agentes não JS, como mecanismos de pesquisa; você acaba tendo que ter uma navegação baseada?
e outra paralela#
para suportar ambos. É uma dor e a maioria não se incomoda.fonte
Os conjuntos de quadros estão desatualizados no HTML 5 e, às vezes, você precisa ter um quadro com outro site dentro de um site. Além disso, AJAX pode fazer muito. Tente enviar um arquivo para um site em outro domínio por meio de https sem um iframe. AJAX não o ajudará nisso.
fonte
Além de outros motivos, tenho um uso específico de
iframe
em meu aplicativo. Infelizmente, o navegador de destino no meu caso éInternet Explorer 6
. Preciso ter um rodapé e um cabeçalho que sejam fixos em minhas páginas da web. A parte principal desta página é rolável.No entanto, há um bug no IE6 em que não consigo exibir um
div
elemento sobre osselect
elementos usando az-index
propriedade CSS. Portanto, preciso criar umiframe
que será usado como um hack para evitar esse problema.Claro, este é um uso realmente específico
iframe
e apenas uma preocupaçãoIE6
...fonte
Editores Javascript WYSIWYG usam iframes, porque essa é a maneira mais fácil e melhor de fazer isso. Por exemplo, TinyMCE usa:
http://tinymce.moxiecode.com/
fonte
Eu estava construindo uma rede social e vejo iframes sendo úteis para widgets para colocar no site de outras pessoas para mostrar como um mini perfil ou integrar com o conteúdo em um servidor remoto. Parece a maneira mais simples de construir isso. Eu sei que alguns widgets usam JavaScript. Além disso, com o método iframe, a sessão é igual a visitar o site normalmente, portanto, ótimo para botões semelhantes.
fonte
Muitos editores de texto formatado (por exemplo, TinyMCE, HTMLArea) são implementados como iframe.
fonte
Iframes são adequados para alguns casos, como solicitações de domínio X ou postagem de dados em uma fonte por meio de parâmetros. Mas quando eu quero acessar dados através de domínios, eu prefiro usar arquivos CSS - eles podem aceitar parâmetros, definir cookies, adicionar conteúdo à página (: antes e: depois) e dar um feedback visual.
fonte