Por que nenhum HTML do lado do cliente inclui tag?


18

Outro dia, fiz uma pergunta para mim por outro programador. Lembro-me (há muito tempo) perguntando o mesmo. Por que uma tag de inclusão do navegador nunca foi considerada? Ou foi?

Especificamente com uma tag que instruiu o navegador a incluir HTML adicional de outras fontes. por exemplo <include src="http://server/foo/bar.html">. Muitas pessoas fazem chamadas javascript e são preenchidas innerHTMLpara realizar o mesmo, quando o mesmo fora do mecanismo javascript puder ser realizado pelo navegador.

Seria doloroso aninhar <HTML>s <BODY>s (ie), mas temos que considerar esse aspecto em qualquer lugar de qualquer maneira.


Entidades externas não lhe dão isso já?
Peter Taylor,

A transclusão foi considerada uma característica central do hipertexto, mesmo desde sua invenção nos anos 60. Então, eu tenho certeza que foi considerado ...
Alex Feinman

Respostas:


12

Sou a última pessoa no mundo que se lembra das tags e do Netscape 4-only ) ?layerilayer

O Netscape 4 também permitiu que a divtag tivesse um srcatributo que realizasse a mesma coisa.

A Netscape os enviou ao W3C, que optou por não incluí-los - use em seu iframelugar.


Eu realmente lembro do NS4, mas não lembro desses recursos. Que pena, continuo contente porque isso pouparia bastante BS javascript entre navegadores.
Jé Queue

Lembro-me de odiar o NS4 com tanta paixão que um dos meus primeiros endereços de e-mail que não eram do provedor de serviços de Internet era uma conta gratuita no ihatenetscape.com. Ah, bons tempos: D
wildpeaks

As camadas de nota não eram muito do lado do cliente, pois ainda tinham um documentobjeto separado sujeito à mesma política de origem; eles eram efetivamente um iframe posicionável.
bobince

14

Por que uma tag de inclusão do navegador nunca foi considerada? Ou foi?

Certamente foi solicitado por todos os autores da web novatos que ainda não haviam elaborado as inclusões no servidor, nos primeiros dias da lista www-html. Mas naquela época o W3 estava feliz em ignorar completamente a pressão dos autores da web.

Se a inclusão entre sites fosse permitida, seria um desastre de segurança. Você pode acessar uma página do banco do usuário e ler o conteúdo. (Originalmente, o script do DOM era limitado, mas você ainda podia ler document.links, document.imagesfunções de script descartadas pela página de destino, etc. Desde então, você pode fazer o que quiser com o conteúdo importado.)

Se a inclusão entre sites não fosse permitida ... bem, o recurso não teria nenhuma vantagem sobre as inclusões do servidor. Seria um trabalho mais lento para o cliente fazer com que o servidor pudesse lidar melhor. Ao contrário <iframe>, uma inclusão teria que bloquear o carregamento da página. Os SSIs seriam, em todos os aspectos, superiores.


5
Na verdade, o cliente (ou um proxy) pode armazenar em cache com mais eficiência, pois os modelos (ou o cabeçalho / rodapé inclui) não tendem a mudar de página para página, o que significa que o usuário pode pelo menos conseguir ver parte da página enquanto alguns o processamento do servidor está em andamento.
Alan Pearce

1
Isso faria muito mais que o servidor. Não sei por que ele precisaria bloquear o carregamento da página; ele poderia ter permitido o carregamento completo da página com preenchimento de conteúdo assíncrono. Obviamente, os navegadores podem ser limitados para permitir apenas puxar de servidores de origem ou para permitir um DOM domained.
Jé Queue

Eu não entendo como é um desastre de segurança. Agora posso ler uma página do banco no servidor e cuspi-la em outra página - é um desastre? Talvez, mas certamente não um relacionado à segurança. Um desastre de segurança estaria lendo cookies de um domínio diferente. Sem esse lado do cliente, incluir seria exatamente o mesmo que o lado do servidor. Não encontra nenhum problema aqui.
serg

Você pode tentar buscar uma página do banco no lado do servidor, mas sua solicitação não será autenticada, para que você não possa baixar nenhuma informação interessante. Uma solicitação do lado do cliente inclui cookies e tokens de autenticação HTTP; se você pode ler a resposta de uma solicitação, pode personificar completamente o usuário.
quer

@obince: Existe alguma razão para que a solicitação no lado do cliente precise incluir cookies e tokens de autenticação HTTP? O cenário de uso primário que eu veria para inclusões do lado do cliente seria melhorar o cache do conteúdo estático da página. Se todas as dezesseis páginas incluírem o mesmo cabeçalho e rodapé, o uso de uma inclusão do lado do cliente aumentaria o tempo necessário para carregar a primeira, mas reduziria o tempo para carregar as quinze restantes. Os casos de uso em que a inclusão seria a mais útil seriam precisamente aqueles em que os dados a serem "incluídos" seriam estáticos e, portanto, não precisariam ... #
1113

10

Eles fizeram. Tornou-se a <frameset>etiqueta. Pouco tempo depois, eles adicionaram a <iframe>tag.

Como a maioria dos servidores Web anteriores suporta inclusões no lado do servidor, uma inclusão textual no lado do cliente provavelmente foi considerada desnecessária, uma vez que a mesma funcionalidade estava disponível também com quadros.


4
Na verdade, os quadros não têm um propósito muito diferente da inclusão. Além disso, as restrições sobre iframes, especialmente no tamanho do conjunto de objetos, certamente não poderiam ter tomado seu lugar.
Jé Queue

5
Discordo - acho que é exatamente isso que os quadros fazem. O que mais são os quadros, exceto a inclusão de mais HTML?
Jaco Pretorius

5
Os quadros estão incluindo HTML nos quadros, não diretamente - esta é a diferença.
mbq 25/09/10

4
@ Xepoch: ... Com um <iframe>. Isso é o que é para . Realmente não é muito diferente de um <div>comoverflow:auto;
greyfade

3
O elemento <iframe> basicamente diz "carregue o documento html especificado e cole-o aqui". Você o escolheria em vez de ajax se quiser que o documento seja carregado imediatamente, e não em uma chamada javascript ... Os quadros NÃO são um layout de janela do HTML. Div, p, br - estes são todos os elementos usados ​​para o layout. Você não usa quadros para o layout (ou não deveria).
Jaco Pretorius

3

O objeto ainda é renderizado em um quadro e você não tem acesso DOM a "dados". O que os desenvolvedores deveriam receber anos atrás é uma maneira de incluir trechos com uma tag simples. Mesmo se essa tag tivesse restrições de sandbox de domínio, seria bastante útil compartimentar os recursos, melhorar a manutenção e tirar proveito do cache do navegador.

Eu sei que existem muitos plugins jquery bons que fazem isso e muitos scripts do lado do servidor, mas não há uma boa razão para não suportar essa tag. A IMO é uma boa pergunta "Por que nenhum cliente inclui tag?"

Se você gosta de jquery, aqui está um bom script de inclusão do lado do cliente: inc: um super-pequeno do lado do cliente inclui o plugin jQuery JavaScript


Sua resposta é a única que parece ter acertado a unha na cabeça. Você está pensando em algo como #include in C? Esse é exatamente o tipo de coisa que "inclusão do lado do cliente" significa para mim - um recurso para incluir trechos HTML arbitrários (em vez de documentos HTML inteiros) em um documento HTML como conteúdo integral do documento. Embora possa ser projetado como um recurso integral do HTML, e não como um estágio de pré-análise - a sintaxe sugerida pelo solicitante <include src = "..."> se encaixaria perfeitamente nisso.
Stewart

O problema de adicioná-lo agora seria a compatibilidade com versões anteriores. Obviamente, isso não explica por que não foi incluído no design original do HTML.
Stewart

Ele poderia, alternativamente, foram concebidos como uma característica da SGML / XML de forma mais geral ....
Stewart

2

Você tentou

<object  type="text/html" data="page.html" height="500" width="500">
What I see if that didn't work 
</object>

Eu acho que isso é implementado na maioria dos navegadores.


Precisará tentar.
Jé Queue

2

As variantes de uma <include>marca foram realmente consideradas no início do HTML , mas nunca chegaram muito longe.


1
No entanto, a semântica dessa tag <include> era semelhante à do frame / iframe / objeto de hoje - incluiria um documento html , e não apenas trechos de texto / código ou tags aleatórias como o #include de C faria.
Tomáš Pospíšek
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.