iframeは「悪い習慣」と見なされていますか?[閉まっている]


286

どこかで、iframeを使用することは「悪い習慣」であるという概念を取り上げました。

これは本当ですか?それらを使用することの長所/短所は何ですか?

回答:


217

すべてのテクノロジーと同様に、それには浮き沈みがあります。iframeを使用して適切に開発されたサイトを回避している場合、もちろんそれは悪い習慣です。ただし、場合によってはiframeを使用できます。

iframeの主な問題の1つは、ブックマークとナビゲーションに関係しています。コンテンツ内にページを埋め込むためだけに使用している場合は、それで問題ないと思います。それがiframeの目的です。

ただし、iframeが悪用されるのを見たこともあります。サイトの不可欠な部分として使用するのではなく、サイト内のコンテンツの一部として使用してください。

通常、iframeなしで実行できる場合は、これがより良いオプションです。ここにいる他の人がもっと多くの情報やより具体的な例を持っていると確信しています、それはすべてあなたが解決しようとしている問題に帰着します。

そうは言っても、HTMLに制限されており、PHPやASP.NETなどのバックエンドにアクセスできない場合は、iframeが唯一の選択肢になることがあります。


23
「HTMLに制限されており、PHPやASP.NETなどのバックエンドにアクセスできない場合、iframeが唯一のオプションである場合があります」...それは真実ではありません。jquery ajaxを介してデータを取得し、divにそのデータを入力することで、ページに外部コンテンツを埋め込むことができます。
developer747

53
@ developer747- 同じコンテンツのポリシーにより、外部コンテンツが別のサイトにある場合は機能しません。一部のあいまいなケースでは、リモートサイトがJSONPをサポートしている場合があります。しかし、おそらくそうではありません。
PeterV.Mørch、2013

2
ユーザーはiframeのサイズを変更できないため、iframeは以前のフレームセットよりもはるかに役に立たないと感じていますが、フレームセットはhtml5には存在しないため、マニュアル以外には使用しません。例:ゲームメーカーのマニュアル
ドミノ

15
ネストされたCSSスコープを定義するには、現在iframeが唯一の方法であることに注意してください。内部のマークアップ、レイアウト、スタイル、JavaScript *を外部のドキュメントから分離します。これは、多くの使用例やアプリケーションで役立ちます。*内部のドキュメントが外部のドキュメントとオリジンを共有している場合、Javascriptは分離されません。一方、異なる起源のドキュメントwindow.postMessage()は、たとえばを使用して通信し、協調的なiframe自動サイズ変更を実装できます。
トビア2015年

1
iFrameは悪です!同様に役立つかもしれません
DanielV 2015

75

これらは悪い習慣ではなく、単なる別のツールであり、柔軟性を追加します。

標準のページ要素として使用する場合...コンテンツは複数のページに分割するシンプルで信頼性の高い方法であるため、優れています。特にユーザーが作成したコンテンツの場合は、内部ページを「サンドボックス化」して、iframeマークアップが不十分であってもメインページに影響が及ばないようにすると便利です。欠点は、スクロールの複数のレイヤー(1つはブラウザー用、もう1つはiframe)を導入すると、ユーザーが不満を感じるようになることです。adzmが言ったように、iframeプライマリナビゲーションにを使用したくないが、それらをビデオまたは別のメディアファイルを埋め込む方法と同等のテキスト/マークアップと考えてください。

バックグラウンドイベントのスクリプティングでは、通常、非表示iframeXmlHttpRequestするか、現在のページのコンテンツをロードするかを選択します。違いはiframe、がページの読み込みを生成するため、ほとんどのブラウザーでブラウザーキャッシュ内を前後に移動できることです。XmlHttpRequestいたるところに使用しているGoogleではiframe、ユーザーがブラウザの履歴内を前後に移動できるようにするために、場合によってはs も使用しています。


11
ドメインからのページを別のドメインからのページに埋め込むためにiframeを使用できることを言及することが重要だと思います。埋め込みページでCookieを使用してユーザーを追跡し、その情報をホストドメインから保持する場合は、JSがホストドメインの制御下にあるため、唯一のオプションはiframeを使用することです。
Nicholas Leonard

@NicholasLeonard良い例は、それらを使用して、インデックスページを、サブページがローカルストレージにあるかどうかを検出するスクリプトにすることで、ページをローカルストレージベースのキャッシュに強制できることです。次に、それが存在する場合はlocalstorageからdocument.writeを、そうでない場合はそのサブページにiframeを追加します。そのサブページで、サブページのHTML要素のouterhtmlをlocalstorageに保存するスクリプトを作成します。このメソッドを使用する本当に良い理由は、ロード画面に追加できることです。

私は同意しない、しかし、それは重要なPOVであるので、私は、それをdownvoteすることはできません。
victorf 2017

28

それらの欠点を理解せずにそれらを使用することは「悪い習慣」です。Adzmの投稿はそれらを非常によくまとめています。

逆に、GmailはバックグラウンドでiFrameを頻繁に使用して、一部の優れた機能(自動ファイルアップロードなど)を実現しています。iFrameの制限を認識している場合は、iFrameの使用について何の責任も感じないはずです。


18

多くの状況でそれらを使用してきたので、iframeはgotoステートメントに相当するWebプログラミングであると本当に思うようになりました。つまり、一般的に回避すべきことです。サイト内では、いくらか役立つ場合があります。ただし、クロスサイトの場合、ほとんどの場合、最も単純なコンテンツ以外には悪い考えです。

可能性を検討してください...パラメータ化されたコンテンツに使用される場合、彼らはインターフェースを作成しました。そして、プロのサイトでは、そのインターフェースはSLAとバージョン管理を必要とします-これらはオンラインになるために急いでほとんど常に無視されます。

アクティブコンテンツ(スクリプトをホストするフレーム)に使用する場合は、(異なる)クロスドメインスクリプトの制限があります。一部はハッキングされる可能性がありますが、めったに一貫していません。また、フレーム化されたコンテンツがインタラクティブである必要がある場合、フレームを超えてインタラクティブにすることは困難です。

ライセンスされたコンテンツで使用する場合、参加サイトは、資格情報をホスト間で帯域外に移動する必要があるため、負担になります。

そのため、サイト内ではたまに役立つものの、マッシュアップにはあまり適していません。実際のポータルとポートレットをはるかによく見ることができます。さらに悪いことに、それらはすべてのウェブアマチュアの最愛の人です-多くの技術マネージャーが多くの問題の解決策として彼らに圧倒しています。実際には、彼らはより多くを作成します。


10

私の経験に基づくと、iframeの良い面は、サードパーティのコードを呼び出すときDocument.write();です。ご存知かもしれませんが、これらのコマンドは、解析方法(DOMパーサーなど)が原因で非同期に呼び出すことができません。この例はhttp://sourceforge.net/projects/phpadsnew/です。phpadsnewsへの複数の呼び出しがあり、サイトが応答を待ってから別のレンダリングに進むため、iframeを使用してサイトの高速化を支援しましたページの一部。iframeを使用すると、サイトがページの他の部分をレンダリングしDocument.write()、phpads のコマンドを非同期で呼び出すことができるようになりました。防止とjsロック。


8

確かにiframesの人には用途があります。ページに気象ネットワークウィジェットを他にどのように配置しますか?他の唯一の方法は、XMLを取得して解析することですが、当然のことながら、関連する天気のグラフィックスをスローする条件が必要です...それほど価値はありませんが、時間があれば、よりクリーンです。


6

元のフレームセットモデル(フレームセットとフレーム要素)は、使いやすさの点で非常に悪かったです。IFrameは、元のフレームセットモデルほど多くの問題を抱えていなかった後の発明ですが、欠点があります。

ユーザーがIFrame内をナビゲートできるようにすると、リンクとブックマークは期待どおりに機能しません(iframeのURLではなく、外部ページのURLをブックマークするため)。


1
同意しないでください...このような幅広いコメントはまったく適格ではありません。
Dawesi 2016

5

メインページがHTTPプロトコルで読み込まれ、ページの一部がHTTPSプロトコルで動作する必要がある場合、iFrameはjsonpの手を打つことができます。

特に、dataTypeがネイティブのjsonではなく、サーバーでjsonに変換し、クライアントで変換して、たとえば複雑なhtmlに戻す必要がある場合。

ですから、iFrameは悪ではありません。


5

それらは悪くはありませんが、実際には役に立ちます。少し前に、Twitterフィードを埋め込む必要があり、mdが同じページでmdを実行できないという大きな問題があったため、別のページに設定して、iframeとして配置しました。

すべてのブラウザー(および電話ブラウザー)がそれらをサポートしているため、これらも優れています。それらを正しく使用する限り、それらは悪い習慣と見なすことはできません。


4

iframeは、ユーザーのインターネット接続の速度やiframeのコンテンツに関係なく、ページのダウンロード速度をわずかに(0.3秒程度)低下させます。これは、ローカルでテストするときに目にするものではありません。実際、これはページに追加されたすべての要素に当てはまりますが、iframeの方が悪いようです。


1
どうして?また、メインページの読み込みが完了したら、iframeを読み込む方法はありますか?
Nicholas Leonard、

3
なぜそんなに遅いのか覚えていません。私は一年前にこれを研究していました。おそらくブラウザは基本的に各iframeに対してまったく新しいレンダリングコンテキストを作成しているためです。ページの読み込みが完了するまで読み込まないようにする場合は、空白のiframeを使用して、ページの読み込みが完了した後にiframeのsrcタグを設定できます。ただし、空白のiframeでもダウンロードではなくページのレンダリングが遅くなるため、ユーザーにとっては表示が少し遅くなることに注意してください。
ブライアン

3
逆に、速度とiFrameを参照するときは、CDN(コンテンツ配信ネットワーク)について説明することを検討してください。iFrameはリソースを並行してダウンロードできるため、速度が向上します(ブラウザーによって異なります)。ここに、私の立場に同意する少なくとも1つの他の参照があります。developer.yahoo.com/performance/rules.html
Strixy

2
@Strixy:指定したURLは、IFrameが空白の場合でもコストがかかることを示しています。IFrameの使用を最小限に抑えることをお勧めします。CDNを使用してサイトを高速化することは、IFrameを使用することと直交しています。CDNは、IFrameの使用コストを軽減するのに役立ちます。ただし、IFrameを使用しないCDNは、CDNおよびIFrameよりも優れています。
ブライアン

1
@Strixy:リソースを並行してダウンロードしたい場合は、より良い方法があります。古いホットネスは、それらすべてをJavaScript経由でロードすることです。新しいホットネスはService Workerを使用することです。これにより、クライアント側のロジックを使用してユーザーエージェントがサイトリソースをロード、プリロード、およびキャッシュする方法を直接管理できます。もう1つの新しいホットネスはhttp / 2プッシュです。これにより、ブラウザーがリソースを要求するのを待たずにリソースをブラウザーに送信できます。ただし、http / 2キャッシュは他のブラウザキャッシュの後にチェックされるため、多くの場合、この目的には適していません。
ブライアン

3

IFRAMEが動的なコンテキストメニューを作成する簡単な方法として非常にうまく適用されているのを見てきましたが、そのWebアプリの対象ユーザーはInternet Explorerユーザーのみでした。

それはすべてあなたの要件に依存すると私は言うでしょう。ページがすべてのブラウザで同等に機能することを確認したい場合は、IFRAMEを避けてください。ターゲットが絞られていて、よく知られているオーディエンス(ローカルイントラネットなど)を対象としていて、IFRAMEを使用するメリットがある場合は、そうしても問題ないと思います。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.