Lenda urbana

Há um verdadeiro complô contra o uso de quadros ("frames").
EBER, no entanto, desconhece qualquer impedimento relevante.

As piores limitações que se aplicam a páginas com quadros também se aplicam a páginas sem quadros.
Se o navegador bloquear a execução de scripts todo mundo vai estar no mesmo barco.

As coisas podem ficar complicadas com as soluções atuais no caso de aninhamentos intensos de quadros. Ou seja, um quadro dentro de outro, dentro de mais outro e por aí em diante. As implementações atuais no mercado não fornecem um redirecionamento digno ainda (pelo menos sem lançar mãos de scripts no lado cliente). De qualquer maneira tudo vai depender das necessidades de cada projeto.
A realidade é que a grande maioria dos intersítios sem quadros se comportam como um intersítio do tipo Quadro_Menu x Quadro_Principal.
Portanto, sem dificulade alguma pra implementação de quadros. Já que é um aninhamento trivial e de facílimo redirecionamento.

Um intersítio "sem quadros" na verdade é um intersítio com um único quadro (ou seja, as páginas se comportam sob a instrução <base target="_self">).
É muito mais complicado fazer um intersítio com um único quadro do que com dois ou mais (afinal é uma forçassão de barra, é a escolha antinatural).
Quem teve a paciência pra fazer com um único vai conseguir fazer com dois facilmente (os quadros foram feitos pra ajudar e não o contrário).

A única argumentação que cheira a sensatez é aquela sobre a catalogação de páginas pelos buscadores.
Os buscadores disponibilizam diretamente as páginas. Então o internauta vai entrar na página sem passar pelo quadro.
Em fato isso só representa um empecilho pra páginas HTML.
Intersítios feitos em ASP e ASP.NET têm como contornar isso facilmente com o uso de SESSION.
Basta colocar uma SESSION em cada página. Se estiver vazia é porque não passou pela "default". Daí é só uma questão de redirecionamento.
Ou seja, uma brincadeira pra iniciante resolver.
Aliás coisa parecida já é feita em intersítios que requerem mais segurança. Há inúmeras situações que determinadas páginas não podem ser acessadas diretamente. Elas precisam antes ser validadas por uma página de "login".

Enfim, a desculpa pra se evitar quadros não passa de mais uma lenda urbana; e das piores diga-se de passagem.
Tem gente que prefere usar todo tipo de gato, prefere deixar as páginas pesadonas (todo intersítio de médio/grande porte sem quadro é inerentemente lento, pois todo intersítio de médio/grande porte se comporta como um aplicativo), prefere transformar todo o intersítio num elefante branco, mas não usa quadros. E pior, sai por aí garganteando que faz um código moderno.


default.asp
<html>
  <head>
    <title>Redirecionamento</title>
  </head>
  <frameset rows="*,20%">
    <frameset cols="60%,*">
      <frame name="Menu" src="menu.asp" target="_self">
      <frame name="Principal" src="pagina.asp" target="_self">
    </frameset>
    <frame name="Embaixo" src="embaixo.asp" target="_self">
  </frameset>
</html>

menu.asp
<html>
  <head>
    <title>Menu</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="expires" content="0">
    <base target="Principal">
  </head>
  <body>
    <table width="100%">
      <tr><td><a href="redireciona.asp?origem=Principal">Quadro Principal</a></td></tr>
      <tr><td><a target="Embaixo" href="redireciona.asp?origem=Embaixo">Quadro Embaixo</a></td></tr>
      <tr><td><a target="_blank" href="redireciona.asp?origem=_blank">Nova janela (_blank)</a></td></tr>
      <tr><td><a target="_top" href="redireciona.asp?origem=_top" >Janela inteira (_top)</a></td></tr>
    </table>
  </body>
</html>

redireciona.asp
<html>
  <head>
    <title>Redirecionar</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="expires" content="0">
  </head>
  <body>
    <% =Response.Redirect ("pagina.asp?origem=" & Request.QueryString ("origem")) %>
  </body>
</html>

pagina.asp
<html>
  <head>
    <title>Página</title>
    <meta http-equiv="pragma" content="no-cache">
    <meta http-equiv="expires" content="0">
  </head>
  <body>
    <% =Request.QueryString ("origem") %><br>
    Hora: <% =Time %>
  </body>
</html>

embaixo.asp
<html>
  <head>
    <title>Embaixo</title>
  </head>
  <body>
    EMBAIXO
  </body>
</html>




Clique aqui pra baixar o código

Clique aqui pra abrir no navegador




http://transeberiano.brinkster.net