Perché nessun HTML sul lato client include tag?


18

L'altro giorno mi è stata posta una domanda da un altro programmatore. Ricordo (molto tempo fa) che mi chiedevo lo stesso. Perché un tag include sul lato browser non è mai stato considerato? O è stato?

In particolare con un tag che indicava al browser di includere HTML aggiuntivo da altre fonti. es <include src="http://server/foo/bar.html">. Molte persone effettueranno chiamate javascript e riempiranno innerHTMLper fare lo stesso, quando lo stesso potrebbe essere realizzato dal browser tramite un motore javascript.

Sarebbe stato doloroso dover annidati <HTML>s <BODY>s (vale a dire), ma dobbiamo considerare che aspetto da nessuna parte comunque.


Le entità esterne non ti danno già questo?
Peter Taylor,

La transclusione era considerata una caratteristica fondamentale dell'ipertesto fin dalla sua invenzione negli anni '60. Quindi sono sicuro che è stato considerato ...
Alex Feinman,

Risposte:


12

Sono l'ultima persona sulla terra che ricorda i tag (solo per Netscape 4 ) layere i ilayertag?

Netscape 4 ha anche permesso al divtag di avere un srcattributo, che ha ottenuto lo stesso risultato.

Netscape li ha inviati al W3C, che ha scelto di non includerli: utilizzare iframeinvece.


Ricordo davvero NS4 ma non ricordo quelle caratteristiche. Peccato, mi accontento comunque di risparmiare un sacco di javascript BS cross-browser.
Jé Queue,

Ricordo di aver odiato NS4 con tale passione che uno dei miei primi indirizzi e-mail non ISP era un account gratuito su ihatenetscape.com. Ah, bei tempi: D
wildpeaks

I livelli di nota non erano piuttosto un lato client in quanto avevano ancora un documentoggetto separato soggetto alla stessa politica di origine; erano effettivamente un iframe posizionabile.
Bobince,

14

Perché un tag include sul lato browser non è mai stato considerato? O è stato?

È stato certamente richiesto da ogni nuovo autore web che non avesse ancora elaborato Server Side Includes, nei primi tempi nell'elenco www-html. Ma a quei tempi W3 era felice di ignorare completamente la pressione dell'autore del web.

Se fosse consentita l'inclusione tra siti, sarebbe un disastro di sicurezza. È possibile estrarre una pagina dalla banca dell'utente e leggere il contenuto da essa. (Inizialmente, gli script DOM erano limitati, ma si poteva ancora leggere da document.links, document.imagesfunzioni di script rilasciate dalla pagina di destinazione, ecc. Da allora è possibile fare quello che ti piace con i contenuti importati.)

Se l'inclusione tra siti non fosse consentita ... beh, allora la funzione non avrebbe alcun vantaggio rispetto alle inclusioni lato server. Sarebbe un lavoro più lento per il client che il server avrebbe potuto gestire meglio. Diversamente <iframe>, un'inclusione dovrebbe bloccare il caricamento della pagina. Le SSI sarebbero in ogni modo superiori.


5
In realtà, il client (o un proxy) potrebbe memorizzare nella cache in modo più efficiente, poiché i modelli (o l'intestazione / piè di pagina inclusi) non tendono a cambiare da pagina a pagina, il che significa che l'utente potrebbe almeno essere in grado di vedere parte della pagina mentre alcuni l'elaborazione sul lato server è in corso.
Alan Pearce,

1
Farebbe molto di più rispetto al server. Non sono sicuro del motivo per cui dovrebbe bloccare il caricamento della pagina, avrebbe potuto consentire il caricamento della pagina intera con riempimento del contenuto asincrono. Ovviamente potrebbe essere limitato dai browser per consentire solo il pull dai server di origine o per consentire un DOM di dominio.
Jé Queue,

Non capisco come sia un disastro di sicurezza. Posso leggere una pagina di banca sul lato server in questo momento e sputarla su un'altra pagina - è un disastro? Forse, ma certamente non legato alla sicurezza. Il disastro di sicurezza dovrebbe leggere i cookie da un dominio diverso. Senza questo lato client includere sarebbe esattamente uguale a quello lato server. Non vedo alcun problema qui.
serg

Puoi provare a recuperare una pagina di banca sul lato server ma la tua richiesta non sarà autenticata, quindi non potrai scaricare alcuna informazione succosa. Una richiesta dal lato client include cookie e token di autenticazione HTTP; se riesci a leggere la risposta da tale richiesta puoi impersonare completamente l'utente.
bobince

@bobince: c'è qualche motivo per cui la richiesta sul lato client dovrebbe includere cookie e token di autenticazione HTTP? Lo scenario di utilizzo principale che vedrei per le inclusioni sul lato client sarebbe quello di migliorare la memorizzazione nella cache del contenuto statico della pagina. Se sedici pagine includono tutte la stessa intestazione e piè di pagina, l'utilizzo di un'inclusione lato client aumenterebbe il tempo richiesto per caricare la prima, ma ridurrebbe il tempo necessario per caricare le restanti quindici. I casi di utilizzo in cui l'inclusione sarebbe il più utile sarebbero precisamente quelli in cui i dati da "includere" sarebbero statici e quindi non necessari ...
supercat

10

Loro fecero. È diventato il <frameset>tag. Non molto tempo dopo, hanno aggiunto il <iframe>tag.

La maggior parte dei primi server Web supportati include lato server, quindi una inclusione testuale lato client è stata probabilmente ritenuta non necessaria, dato che la stessa funzionalità era disponibile anche con i frame.


4
In realtà i frame non hanno uno scopo molto diverso dall'inclusione. Inoltre, le restrizioni sugli iframe, specialmente nelle dimensioni del set di oggetti, non avrebbero sicuramente potuto prendere il suo posto.
Jé Queue,

5
Non sono d'accordo - penso che sia esattamente ciò che fanno i frame. A cosa servono i frame se non per includere più HTML?
Jaco Pretorius,

5
I frame includono HTML nei frame, non direttamente: questa è la differenza.
mbq,

4
@Xepoch: ... Con un <iframe>. Questo è ciò che è per . Non è molto diverso da un <div>conoverflow:auto;
greyfade il

3
L'elemento <iframe> dice sostanzialmente "carica il documento html specificato e incollalo qui". Lo sceglieresti invece di Ajax se desideri che il documento venga caricato immediatamente, non su una chiamata javascript ... I frame NON sono layout a finestre di HTML. Div, p, br: sono tutti elementi utilizzati per il layout. Non usi i frame per il layout (o non dovresti comunque).
Jaco Pretorius,

3

L'oggetto viene comunque visualizzato in un frame e non hai accesso DOM ai "dati". Quello che gli sviluppatori avrebbero dovuto dare anni fa è un modo per includere frammenti con un semplice tag. Anche se questo tag presentasse restrizioni per il sandbox del dominio, sarebbe piuttosto utile compartimentare le funzionalità, migliorare la manutenzione e sfruttare la memorizzazione nella cache del browser.

So che ci sono molti buoni plugin jquery che fanno questo e molti script sul lato server, ma non c'è una buona ragione per non supportare un tale tag. IMO è una buona domanda "Perché nessun lato client include tag?"

Se ti piace jquery qui è un buon lato client include script: inc: un lato client super-piccolo include plugin jQuery JavaScript


La tua risposta è l'unica che sembra aver colpito l'unghia sulla testa. Stai pensando a qualcosa come #include in C? Questo è esattamente il tipo di cosa che "il lato client include" per me - una funzione per includere frammenti HTML arbitrari (piuttosto che interi documenti HTML) all'interno di un documento HTML come contenuto integrale del documento. Sebbene possa essere progettato come una funzionalità integrale dell'HTML piuttosto che come una fase di pre-analisi, la sintassi suggerita da chi fa domanda <include src = "..."> si adatterà perfettamente a questo.
Stewart,

Il problema con l'aggiunta ora sarebbe la compatibilità con le versioni precedenti. Naturalmente, questo non spiega perché non è stato incluso nel design originale di HTML.
Stewart,

In alternativa, avrebbe potuto essere progettato come una caratteristica di SGML / XML più in generale ....
Stewart,

2

Hai provato

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

Penso che sia implementato nella maggior parte dei browser.


Dovrà provare.
Jé Queue,

2

Le varianti di un <include>tag sono state infatti considerate nella prima storia dell'HTML , ma non sono mai andate molto lontano.


1
Comunque la semantica di quel tag <include> era simile a quella dell'attuale frame / iframe / object - includerebbe un documento html e non solo frammenti di testo / codice o tag casuali come farebbe #include di C.
Tomáš Pospíšek,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.