2008-09-18 16 views
29

私はウィジェットを構築しています。私はその中にコンテンツを表示するためにiframeを使っています。ある時点では、サードパーティのHTMLとJSの提供を開始するかもしれないので、iframeが良いアイデアだと思っていました。iframeはひどいアイデアですか?

これは、ウィジェットのJavaScriptを少し複雑にしています。私はこれが最良の実装ではないかもしれないと心配しています。

アドバイスをありますか?他の人々がiframeについて考えるものを聞くことは、大きな助けになるでしょう。

答えて

24

いいえ、iframeに問題はありません。あなたが第三者のコンテンツの提供を開始しようとしているのであれば、iframeはおそらくより良い考えです。

今後のHTML5仕様では、このような状況でiframeにさらにセキュリティ機能を組み込む予定であるため、今もそれらを使用することをお勧めします。

+3

私はここに+1 - サーバは常につかむと、「サードパーティのコンテンツを解析することができます - 唯一の注意点は、当然のことながら、本当に理想的な(すなわちではなく、単にデータをつかむためのAjaxを使用して必要であるが使うことを確認することですアウトオブバンドコールを介して取得されます)。 –

2

ウィジェットの機能によって異なります。 Iframeには場所がありますが、レイアウトの頭痛はほとんどありません(あなたのjsをもっと複雑にすることは言うまでもありません)ので、大部分の人は避けがちです。

8

最近発見されたのは、 iframeにはCookieを失う問題があることがあり、そのために私が関わったアプリケーションでセッション状態が失われました。

私にとっては、別の開発拠点が自分のページで自分の.aspxページの1つを消費していたというシナリオでした。これは、我々が目立つかもしれないし、そうでないかもしれない別々のサーバ上にあったことを意味します。

これは明らかに、親ページが子ページのCookieを拒否したために発生しています...セッションCookieと同様に、セッションも終了します。この作品は、ほとんど関与しているかの

特定の力学:More Details

この問題は、Firefoxには影響を与えませんでしたが、それはIE7に現れなかったし、それが数時間のために本当の謎でした。

また、上記のリンク先の記事と一点で矛盾する必要があります。この記事では、含まれているページも.aspxである場合、これを取得しないと述べています。この場合、両方のページが.aspxだったため、そうではありませんでした。

この記事ではこのような状況について他にも疑問を投げかけていますが、解決につながったので、それも同様です。

記事は、私がP3P(プライバシー設定のプロジェクト - 私はそれを聞いたことがありませんでした)注入し、次のコードに入れ、示唆されているように、ページのInitイベントのヘッダー:

HttpContext.Current.Response.AddHeader("p3p", "CP=\""IDC DSP COR ADM DEVi TAIi PSA PSD IVAi IVDi CONi HIS OUR IND CNT\""") 

を...そして、問題を修正した

2

フレームのようなiframeは、手元のタスクに使用するためのコントロールに過ぎません。そのように、それ自体は良くも悪くもないが、手元の課題とクライアントの要求に基づいて、良いか悪いかが分かる。私の知る限りでは、現代のブラウザー(および非Linuxユーザー)は問題なくiframeを「見て消費する」ことができます。

1

良い選択肢は、オーバーフローCSSプロパティを使用することです。デフォルト値は表示されますが、非表示、スクロールまたは自動に設定できます。私はあなたのケースで自動を使用します。コンテンツが大きくなりすぎると、iframeがあるように見えますが、ページ上にはまだ正しいです。

は、以下を参照してください。

0

overflow property必ずしもそうではありません、限りインラインフレーム内のコンテンツが予測可能であるとして。

11

XMLHTTPRequestが広く使用されるようになる前に、人々はJavaScriptとiframeの組み合わせを使用して、フルページリフレッシュを行わずに動的にコンテンツを提供していました。

このようにサイトを開発する方法についてはたくさんの情報がありますので、ヒットする可能性が高い多くの障害の回避策を見つけるのは比較的簡単です。

私が痛みを感じていることの1つは、iframeでJavaScriptをクロスドメインで使用することです。 iframeに埋め込んだページが「親」ページとは別のドメインからのものである場合、ブラウザにはセキュリティ制限が設定されています。トリックは、両方のページが宣言するためのものです

document.domain = 'somedomain.com'; 

このような回避策については、Web上にたくさんのものがあります。

幸運を祈る!

+6

私は彼らがdocument.domainを上位レベルのドメインに変更することしかできないと考えています。つまり、www.acme.comはドメインをacme.comに変更できますが、google.comには変更できません。したがって、iframeは単一ドメインのサブドメイン間で通信するのに役立ちます。 (私は間違っているかもしれませんが、それは私が覚えているものです) – Josh

+0

@Josh - 正しいですが、document.domainは同じ親ドメイン上の異なるサブドメインのページに対してのみ機能します。 –

+0

@Joshそうですが、いつでも 'window.location.href'を使うことができます。 – nyuszika7h

4

個人的には、私はそれを避けるだろうあまりにも面倒なく。 Javascript(または動的にロードする必要がある場合はAJAX)を使用すると、divを使用して必要に応じて内容を変更することができます。これにより、柔軟性が増し、JSが単純化されますあなたのウィジェットとページの残りの部分との間の相互作用の

つまり、私は両方のオプションを調べて、JSパスがあまりにも複雑すぎると思われる場合は、iframeを使用してください。

5

自分が知っている「本当に悪い」ものは1つだけです。

あなたのサードパーティは少し早すぎる彼らのDOMを変更しようとするいくつかのJavaScriptを、ない場合... IE6とIE7は、その後、インラインフレームだけではなくて、ブランク、ああそう助けにならない「Operation Aborted」エラーがスローされます周囲のページ全体はです。 (あなたのサイトがダウンしているなど)

IE8では修正されていませんが、クラッシュはより適切に処理されます。

4

私の経験では、iframeはハックやタイムセーバーのいずれかであり、使用している場合は、そのような理由で必要であることを確認してください。コンテンツを管理している(またはミラーリングやスクレイピングで制御できる)場合は、AJAXやサーバーサイドインクルードを使用して外部データをプルすることを検討してください。堅牢で、管理しやすくなります。

0

技術的にはiFrameには何も問題はありません。しかし意味論的に、悪いことがあります。

ウェブはHTTPに基づいています。これは、特定のURLが常に一意のリソースにつながると言うプロトコルです。

iFrameを使用すると、1つのURLの背後にあるWebページですべてのリソースを溶かして、いくつかのリソースを提供するだけです。どのようにWebが成長するかについて懸念がある場合は、面倒です。さらに、検索エンジンのロボットにとっては、やっかいです。

6

私は大多数に同意するつもりはありません、はい、iframeは絶対にひどいアイデアです。しばらくの間、Web Designコミュニティ内で働いていた人なら、iframeは純粋な悪であることに同意します。絶対にが必須でないと避けるべきです。

私が悪いと思う理由は、ウェブページのナビゲーションパターンを壊すためです。 iframeを使うことで、ブラウザの前後のボタンを効果的に破り、ユーザを混乱させる可能性があります。それはHTTPプロトコルの背後にあるアイデア全体を壊します。 URLが常にユニークな場所につながることを意味します。もしiframeが馬だったら、ずっと前に引退していたはずです。コンテンツを動的に配信する方法は他にもありますが、代わりにこれらを使用する必要があります。

ウィジェットを作成している場合は、iframeを使用することで直ちに問題が消えます(検索エンジンには悪い、ブックマークには悪いなど)。どちらの方法でもコンテンツは動的に、または新しいウィンドウiframeよりも

+0

-1という別の答えで言いました。「それ自体は良いことでも悪いことでもないが、手近な課題に基づいて良いか悪いか」また、戻るボタンと進むボタンの問題は、iframeに固有の問題ではなく、他の動的コンテンツでも発生します。 – Christophe

1

iframeは邪悪ではなく、他のツールのようなものであり、そのメリットを判断するには、使用するコンテキストを判断する必要があります。 Google Image Searchやその他のハイプロファイルサイトでは、限定された目的でiframeを使用しています。

一般に、私はそれらがブランド化に使用されていること、またはユーザーがサイト外にユーザーをリダイレクトするサイトに戻ることができることがわかります。

たとえば、クロスドメインiframeを使用している場合は、ページが提供されている外部のドメインを参照するiframeは、セキュリティ上の理由からデザイン上制限されており、関連付けられているドメイン外のDOMの内部をjavascriptでアクセスすることはできません。

また、多くのサイトでは、サイトが埋め込まれることを防ぎ、iframeをストライプ(ドメインのトップURLをリダイレクト)します。

0

日時:「HTTPプロトコルの背後にある全体のアイデア; URLは、常にユニークな場所につながることを」

私は主にPOSTを使用しての代わりに、GETセキュリティと拡張性(のために同じURLから私の全体のCMSを提供パラメーター)。私は認証なしでセキュリティで保護されたコンテンツを見せたくないし、新しいページごとに認証を心配する必要がないので、ディスパッチシステムによって開発が楽になります。

また、一部のアプリケーションでは、SEOは適用されません(WebベースのERPなど)。

私はPHPで生成されたアセンブリツリーからコンテンツを提供するためにiFrameを使用します。ユーザーが部品/アセンブリの詳細を表示したいときはいつでも、ツリー(およびノー​​ドの可視性)を更新したくありません。

+6

私はあなたのユーザーの一人ではないことを嬉しく思います! (これは* all *でブックマークできません) – SamB

0

usability and accessability issues with iframesがいくつかあります。一部のブラウザやスクリーンリーダーは、アイフレームを表示することはできませんので、あなたは代替コンテンツを提供する必要があります:あなたは、サードパーティのコンテンツの提供を開始した場合、あなたはそれが読み込みが完了した後にフォーカスをつかむのiframeに気を付ける必要があります

<iframe src="content.html"> 
    <p> 
     This content will only be displayed by browsers that do not support 
     iframes. You should provide a link to the content, or in your 
     case an alternative way to use your widget. 
    </p> 
</iframe> 

。通常のユーザにとっては些細なことに気をつけていますが、スクリーンリーダーで閲覧しているユーザにとっては非常に混乱することがあります。

0

iframeにはほとんど言及がありませんが、私の詰め物はバグです。

私たちの同僚は、我々はその後、支持材料の多くと一緒に私たちのサイトに表示Googleドキュメントのスプレッドシートにロードされている動的に変化するデータベースに投資し、作業の寿命を持っています。

誰かが私のページのソースからのiframeコードをつかみ、自分のページにそれを無理に勧め止めるものは何も絶対にありません。今すぐ彼らはすべてのデータを取得しています。数分前に更新され、ページにはまったく何も表示されませんでした。

グーグルはiframeは、そのトラックにそれを停止すると、特定のドメインに接続することができれば。

任意のアイデア、明るい火花?

+0

これはかなり古いですが、まだ解決策を探しているなら、 'X-Frame-Option'ヘッダを使って誰がiframeを読み込めるか制限することが考えられます。さて、あなたはそれを制御しないので、明らかにこのヘッダーをGoogleドキュメントのURLに適用することはできません。しかし、あなたが行うことができるのは、Google Docs URLを直接使用する代わりに、Google Docs URLにサーバー側からリダイレクトする独自のURLを提示することです。そして、あなた自身のURLに適切な 'X-Frame-Option'ヘッダーを適用することができます – Suhas

関連する問題