Por que as pessoas ainda usam iframes? [fechadas]

89

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 iframefoi 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)

Ventus
fonte
Eu concordo com Moshe acima. O único outro uso de Iframes é para: clientes da web antigos que não suportam CSS moderno ou em algum ambiente proprietário.
Boris Hamanov
Hoje em dia, infelizmente, todo navegador tem um problema de compatibilidade! eles não são padrão! a tag div tem um problema, a tag table tem um problema e assim por diante ... eles vão perder nosso tempo para criar um site 100% compatível. algumas vezes a forma final de tornar um site compatível até com o IE7. está usando um iframe. iframe pode corrigir todos os problemas: '(se você verificar o status do meu site, verá muitas visitas do IE7. muitas pessoas estão usando navegadores antigos, mesmo em 2016 !!!
Mahdi Jazini

Respostas:

102

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).

Dan Beam
fonte
2
Relativamente ao n.º 1, mas o cabeçalho HTTP pode bloquear iframe ...
Pacerier
2
Re # 2, mas você pode fazer isso sem iframe, por exemplo<embed src="http://www.pdf995.com/samples/pdf.pdf" type="application/pdf">
Pacerier
4
Relativamente ao n.º 3, o Gmail pode ser reescrito sem iframes. Então, por que as pessoas ainda usam iframes para navegadores modernos? A pergunta ficou sem resposta.
Pacerier,
22

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.

gertas
fonte
1
Isso é muito mais simples e é um bom exemplo de anúncios :)
oneworld
15

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 .

Reinderien
fonte
4
Isso é verdade, mas alterar / adicionar / manipular o iframe requer JavaScript na maioria dos casos (exceto em 2 que consigo pensar, vinculando a destinos e <form>postando em destinos).
Dan Beam
Direito; mesmo assim, alterar o que o iframe aponta para o uso de JS normalmente requer uma linha, em oposição à maior complexidade de XMLHttpRequest.
Reinderien
7

Eu os uso em sites de ajax, quando preciso carregar arquivos sem recarregar a página.

CodeReaper
fonte
@Mwizak Ajax deve afaik cobrir todos os tipos de javascript incluindo angular.
CodeReaper
3

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.

Kris van der Mast
fonte
Não vejo por que você não pode adicionar cabeçalhos com XMLHttpRequest ( w3.org/TR/XMLHttpRequest/#the-setrequestheader-method ) a menos que o domínio, protocolo e portas não correspondam (o que significa que você tem um problema diferente do cabeçalhos)?
Dan Beam
A questão é que são 2 aplicativos diferentes, geralmente até 2 tecnologias completamente diferentes. Um lida com a autenticação e o outro pega os cabeçalhos injetados para o tíquete de autenticação (ou construindo-o quando necessário).
Kris van der Mast
3

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 XMLHttpRequeste gravando-o nas div's de conteúdo principal innerHTML. Freqüentemente, isso é feito com jQuery load()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.

bobince
fonte
Aguarde a API de histórico em HTML5, que permitirá a busca de conteúdo sem recarregar ou quebrar o botão voltar / avançar.
Lie Ryan
2

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.

McTrafik
fonte
2

Além de outros motivos, tenho um uso específico de iframeem 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 divelemento sobre os selectelementos usando a z-indexpropriedade CSS. Portanto, preciso criar um iframeque será usado como um hack para evitar esse problema.

Claro, este é um uso realmente específico iframee apenas uma preocupação IE6...

romaintaz
fonte
1

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/

novato
fonte
1

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.

Keverw
fonte
0

Muitos editores de texto formatado (por exemplo, TinyMCE, HTMLArea) são implementados como iframe.

Mentira ryan
fonte
Isso ocorre por causa do FireFox IIRC.
alex
0

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.

fb55
fonte