¿Por qué no hay una etiqueta de inclusión HTML del lado del cliente?

18

El otro día, otro programador me hizo una pregunta. Recuerdo (hace mucho tiempo) que me preguntaba lo mismo. ¿Por qué nunca se consideró una etiqueta de inclusión del lado del navegador? ¿O era?

Específicamente con una etiqueta que le indicó al navegador que incluya HTML adicional de otras fuentes. por ej <include src="http://server/foo/bar.html">. Muchas personas harán llamadas de JavaScript y se completarán innerHTMLpara lograr lo mismo, cuando el navegador pueda lograr lo mismo fuera del motor de JavaScript.

Hubiera sido doloroso haber anidado <HTML>s <BODY>s (es decir), pero de todos modos tenemos que considerar ese aspecto en cualquier lugar.

Jé Queue
fuente
¿Las entidades externas ya no te dan esto?
Peter Taylor
La transclusión se consideró una característica central del hipertexto incluso desde su invención en los años 60. Así que estoy seguro de que se consideró ...
Alex Feinman

Respuestas:

12

¿Soy la última persona en la tierra que recuerda (solo Netscape 4 ) layery las ilayeretiquetas?

Netscape 4 también permitió que la divetiqueta tuviera un srcatributo, lo que logró lo mismo.

Netscape los envió al W3C, que decidió no incluirlos, en su iframelugar, úselos.

Dori
fuente
De hecho, recuerdo NS4 pero no recuerdo esas características. Lástima, todavía me contento con que ahorraría una gran cantidad de BS de JavaScript entre navegadores.
Jé Queue
Recuerdo que odié a NS4 con tanta pasión que una de mis primeras direcciones de correo electrónico que no era ISP fue una cuenta gratuita en ihatenetscape.com. Ah, buenos tiempos: D
wildpeaks
Las capas de notas no eran del todo del lado del cliente, ya que todavía tenían un documentobjeto separado sujeto a la Política del mismo origen; eran efectivamente un iframe posicionable.
bobince
14

¿Por qué nunca se consideró una etiqueta de inclusión del lado del navegador? ¿O era?

Ciertamente, fue solicitado por cada autor web novato que aún no había trabajado con Server Side incluye, en los primeros días en la lista www-html. Pero en esos días W3 estaba feliz de ignorar por completo la presión de los autores web.

Si se permitiera la inclusión entre sitios, sería un desastre de seguridad. Puede acceder a una página del banco del usuario y leer el contenido del mismo. (Originalmente, scripting DOM era limitado, pero aún se podía haber leído de document.links, document.images, las funciones de script se redujeron en la página de destino, etc. Desde entonces usted puede hacer lo que quiera con el contenido importado.)

Si no se permitiera la inclusión entre sitios ... bueno, entonces la característica no tendría ninguna ventaja sobre las del lado del servidor. Sería un trabajo más lento para el cliente hacer que el servidor podría haber manejado mejor. A diferencia <iframe>, una inclusión tendría que bloquear la carga de la página. Los SSI serían en todos los sentidos superiores.

bobince
fuente
55
En realidad, el cliente (o un proxy) podría almacenar en caché de manera más eficiente, ya que las plantillas (o el encabezado / pie de página incluido) no tienden a cambiar de una página a otra, lo que significa que el usuario al menos podría ver parte de la página mientras algunos el procesamiento del lado del servidor está en curso.
Alan Pearce
1
Haría mucho más que el servidor. No estoy seguro de por qué necesitaría bloquear la carga de la página, podría haber permitido la carga de la página completa con relleno de contenido asíncrono. Por supuesto, podría estar limitado por los navegadores para permitir solo la extracción de servidores de origen o para permitir un DOM dominado.
Jé Queue
No entiendo cómo es un desastre de seguridad. Puedo leer una página bancaria en el lado del servidor en este momento y escupirla en otra página, ¿es un desastre? Tal vez, pero ciertamente no uno relacionado con la seguridad. El desastre de seguridad sería leer cookies de un dominio diferente. Sin este lado del cliente, la inclusión sería exactamente la misma que la del lado del servidor. No veo ningún problema aquí.
serg
Puede intentar buscar una página bancaria en el lado del servidor, pero su solicitud no se autenticará, por lo que no puede descargar ninguna información jugosa. Una solicitud del lado del cliente incluye cookies y tokens de autenticación HTTP; Si puede leer la respuesta de dicha solicitud, puede suplantar completamente al usuario.
bobince
@bobince: ¿Hay alguna razón por la cual la solicitud del lado del cliente debería incluir cookies y tokens de autenticación HTTP? El escenario de uso principal que vería para las inclusiones del lado del cliente sería mejorar el almacenamiento en caché del contenido de la página estática. Si dieciséis páginas incluyen el mismo encabezado y pie de página, el uso de una inclusión del lado del cliente aumentaría el tiempo requerido para cargar la primera, pero reduciría el tiempo para cargar las quince restantes. Los casos de uso en el que incluyen sería el más útil sería precisamente aquellos en los que los datos que se "incluyen" sería estática y por lo tanto no es necesario ...
supercat
10

Lo hicieron. Se convirtió en la <frameset>etiqueta. No mucho después, agregaron la <iframe>etiqueta.

La mayoría de los primeros servidores web admitían las inclusiones del lado del servidor, por lo que se pensó que una inclusión textual del lado del cliente era innecesaria, dado que la misma funcionalidad estaba disponible también con los marcos.

Greyfade
fuente
44
En realidad, los marcos no tienen un propósito muy diferente al de la inclusión. Además, las restricciones sobre los iframes, especialmente en el tamaño del conjunto de objetos, seguramente no podrían haber tomado su lugar.
Jé Queue
55
No estoy de acuerdo, creo que eso es exactamente lo que hacen los marcos. ¿Para qué más son los marcos excepto incluir más HTML?
Jaco Pretorius
55
Los marcos incluyen HTML en marcos, no directamente, esta es la diferencia.
mbq
44
@Xepoch: ... Con un <iframe>. Eso es lo que es para . Realmente no es muy diferente de un <div>conoverflow:auto;
greyfade
3
El elemento <iframe> básicamente dice "cargar el documento html especificado y pegarlo aquí". Lo elegiría en lugar de ajax si desea que el documento se cargue inmediatamente, no en una llamada de JavaScript ... Los marcos NO son ventanas de diseño de HTML. Div, p, br: todos estos elementos se utilizan para el diseño. No utiliza marcos para el diseño (o no debería de todos modos).
Jaco Pretorius
3

El objeto aún se representa en un marco y no tiene acceso DOM a los "datos". Lo que los desarrolladores deberían haber recibido hace años es una forma de incluir fragmentos con una etiqueta simple. Incluso si esta etiqueta tuviera restricciones de espacio aislado de dominio, sería bastante útil compartimentar características, mejorar el mantenimiento y aprovechar el almacenamiento en caché del navegador.

Sé que hay muchos buenos complementos de jquery que hacen esto y muchos scripts del lado del servidor, pero no hay una buena razón para no admitir dicha etiqueta. OMI es una buena pregunta "¿Por qué no hay etiqueta de inclusión del lado del cliente?"

Si te gusta jquery, aquí hay un buen script para incluir en el lado del cliente: inc: un plugin jQuery de JavaScript para el lado del cliente súper pequeño

Jonas
fuente
Su respuesta es la única que parece haber dado en el clavo. ¿Estás pensando en algo como #include en C? Esto es exactamente el tipo de cosas que "incluir del lado del cliente" significa para mí: una facilidad para incluir fragmentos arbitrarios de HTML (en lugar de documentos HTML completos) dentro de un documento HTML como contenido integral del documento. Aunque podría diseñarse como una característica integral de HTML en lugar de como una etapa de análisis previo, la sintaxis sugerida <include src = "..."> del autor de la pregunta encajaría perfectamente con esto.
Stewart
El problema con agregarlo ahora sería la compatibilidad con versiones anteriores. Por supuesto, esto no explica por qué no se incluyó en el diseño original de HTML.
Stewart
Alternativamente, podría haber sido diseñado como una característica de SGML / XML en general ...
Stewart
2

Has probado

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

Creo que eso está implementado en la mayoría de los navegadores.

Peter Turner
fuente
Necesitaré intentarlo.
Jé Queue
2

Las variantes de una <include>etiqueta fueron consideradas en la historia temprana de HTML , pero nunca llegaron muy lejos.

Trigonometría
fuente
1
Sin embargo, la semántica de esa etiqueta <include> era similar a la del marco / iframe / objeto actual: incluiría un documento html y no solo fragmentos de texto / código o etiquetas aleatorias como lo haría #include de C.
Tomáš Pospíšek