なぜクライアント側のHTMLインクルードタグがないのですか?


18

先日、別のプログラマーから質問がありました。私は(非常に長い時間前に)まったく同じことを思っていたことを覚えています。 ブラウザー側のincludeタグが考慮されなかったのはなぜですか?それともそうでしたか?

特に、ブラウザに他のソースからの追加のHTMLを含めるように指示するタグを使用します。例えば<include src="http://server/foo/bar.html">。多くの人はinnerHTML、javascriptエンジンの外側で同じことがブラウザで実現できる場合、javascript呼び出しを行い、同じことを実現します。

ネストされた<HTML>s <BODY>(つまり)があると痛いでしょうが、とにかくどこでもその側面を考慮する必要があります。


外部のエンティティは既にこれを提供していませんか?
ピーターテイラー

トランスクルージョンは、60年代の発明からも、ハイパーテキストのコア機能と考えられていました。だから私はそれが考慮れたと確信してます...
アレックスファインマン14

回答:


12

私は(Netscape 4のみlayerilayerタグを覚えている地球上の最後の人ですか?

Netscape 4ではdivタグにsrc属性を持たせることもでき、同じことを実現しました。

NetscapeはそれらをW3Cに提出し、W3Cはそれらを含めないことを選択しiframeました。代わりに使用してください。


NS4は確かに覚えていますが、これらの機能は覚えていません。残念なことに、クロスブラウザjavascript BSを大幅に節約できることにまだ満足しています。
ジェキュー

NS4が私の最初の非ISPメールアドレスの1つがihatenetscape.comの無料アカウントだったという情熱で嫌っていたことを覚えています。ああ、良い時間:D
wildpeaks

注:レイヤーはdocument、Same Originポリシーの対象となる別個のオブジェクトを保持しているため、クライアント側には含まれていません。事実上、これらはポジショナブルiframeでした。
ボビンス14

14

ブラウザー側のincludeタグが考慮されなかったのはなぜですか?それともそうでしたか?

確かに、www-htmlリストの初期の頃に、Server Side Includesをまだ実行していないすべての初心者のWeb作成者から確実に要求されました。しかし当時、W3はWeb作成者の圧力を完全に無視して喜んでいました。

クロスサイトインクルージョンが許可された場合、セキュリティ障害になります。ユーザーの銀行からページを取得し、そこからコンテンツを読み取ることができます。(もともと、DOMスクリプティングは限られていましたが、あなたはまだから読み取ることができたdocument.linksdocument.imagesそして、あなたがインポートされたコンテンツと同じように何をするあなたを行うことができますので、スクリプティング機能等、ターゲットページでドロップされました。)

クロスサイトインクルードが許可されていない場合...まあ、この機能はサーバー側インクルードよりも利点がありません。サーバーがより適切に対処できたことをクライアントが行うには、より多くの、より遅い作業になるでしょう。とは異なり<iframe>、インクルードはページの読み込みをブロックする必要があります。SSIはあらゆる点で優れています。


5
実際、テンプレート(またはヘッダー/フッターを含む)はページごとに変更されない傾向があるため、クライアント(またはプロキシ)はより効率的にキャッシュできます。つまり、ユーザーは少なくともサーバー側の処理が進行中です。
アランピアース

1
サーバーよりもはるかに多くのことを行います。ページの読み込みをブロックする必要がある理由がわかりません。非同期コンテンツフィルを使用してページ全体の読み込みを許可できた可能性があります。もちろん、発信元サーバーからのプルのみを許可するか、ドメイン化されたDOMを許可するように、ブラウザーによって制限される可能性があります。
ジェキュー

私はそれがどのようにセキュリティ災害であるかわかりません。今すぐサーバー側で銀行のページを読み、別のページに吐き出すことができます-それは災害ですか?たぶん、しかし確かにセキュリティ関連ではありません。セキュリティ障害は、異なるドメインからのCookieを読み取ることになります。このクライアント側のインクルードがない場合、サーバー側のインクルードとまったく同じになります。ここには問題はありません。
セルグ

サーバー側で銀行のページを取得しようとすることはできますが、リクエストは認証されないため、ジューシーな情報をダウンロードできません。クライアント側からのリクエストには、CookieとHTTP認証トークンが含まれます。そのような要求からの応答を読み取ることができる場合、ユーザーを完全に偽装できます。
ボビンス

@bobince:クライアント側のリクエストにCookieとHTTP認証トークンを含める必要がある理由はありますか?クライアント側インクルードの主な使用シナリオは、静的なページコンテンツのキャッシュを改善することです。16ページすべてに同じヘッダーとフッターが含まれる場合、クライアント側インクルードを使用すると、最初のページを読み込むのに必要な時間が長くなりますが、残りの15ページを読み込む時間は短くなります。インクルードが最も役立つ使用例は、正確に「インクルード」されるデータが静的であるため、必要ない場合です。
supercat 14

10

彼らがやった。<frameset>タグになりました。まもなく、彼らは<iframe>タグを追加しました。

初期のWebサーバーのほとんどはサーバー側インクルードをサポートしていたため、フレームでも同じ機能が利用できることを考えると、クライアント側のテキストインクルードはおそらく不要であると考えられていました。


4
実際には、フレームが包含とは非常に異なる目的を果たすわけではありません。さらに、特にオブジェクトセットのサイズに関するiframeの制限は、それに代わるものとは考えられませんでした。
ジェキュー

5
私は同意しません-それがまさにフレームが何をするかだと思います。HTMLを追加する以外のフレームは何ですか?
ジャコプレトリアス

5
フレームには、直接ではなくフレームにHTMLが含まれています。これが違いです。
-mbq

4
@Xepoch:...と<iframe>。それがそのためです。実際に<div>withとはそれほど違いはありませんoverflow:auto;
-greyfade

3
<iframe>要素は基本的に「指定されたhtmlドキュメントをロードして、ここに貼り付ける」と言っています。Javascript呼び出しではなく、ドキュメントをすぐにロードする場合は、ajaxの代わりに選択します。フレームはHTMLのウィンドウレイアウトではありません。Div、p、br-これらはすべてレイアウトに使用される要素です。レイアウトにフレームを使用しません(または使用しないでください)。
ジャコプレトリアス

3

オブジェクトはまだフレームにレンダリングされ、「データ」へのDOMアクセス権はありません。何年も前に開発者に提供すべきだったのは、単純なタグを含むスニペットを含める方法です。このタグにドメインサンドボックスの制限がある場合でも、機能を区分化し、メンテナンスを改善し、ブラウザのキャッシュを利用すると便利です。

これを行う優れたjqueryプラグインとサーバー側のスクリプトがたくさんあることは知っていますが、そのようなタグをサポートしない正当な理由はありません。IMOは、「なぜクライアント側のインクルードタグがないのですか?」

ここでjqueryが好きな場合は、クライアント側のインクルードスクリプトとして適切です:inc:非常に小さなクライアント側のインクルードJavaScript jQueryプラグイン


あなたの返信は、頭に釘を打ったように見える唯一のものです。Cの#includeのようなものを考えていますか?これはまさに「クライアント側インクルード」という意味です-HTMLドキュメント内に任意のHTMLスニペットを(HTMLドキュメント全体ではなく)統合ドキュメントコンテンツとして含める機能。事前解析段階としてではなく、HTMLの不可欠な機能として設計することもできますが、アスカーの提案する<include src = "...">構文はこれにぴったり合います。
スチュワート

現在追加する際の問題は、後方互換性です。もちろん、これはHTMLの元の設計に含まれていなかった理由を説明しません。
スチュワート

あるいは、より一般的にSGML / XMLの機能として設計することもできます
スチュワート

2

やってみました

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

ほとんどのブラウザに実装されていると思います。


試す必要があります。
ジェキュー

2

<include>タグのバリエーションは、HTMLの初期の歴史で実際に考慮されいましが、決して遠くまでは行きませんでした。


1
ただし、その<include>タグのセマンティクスは、今日のframe / iframe / objectのセマンティクスに似ていました。Cの#includeのようにテキスト/コードまたはランダムタグのスニペットだけでなく、html ドキュメントが含まれます。
トマーシュポスピシェク
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.