iframeコンポーネントはHTML IFRAMEタグを使用して、画面の一部を他のURLの内容に代替表示させます。includeコンポーネントに類似しているように見えますが、そのコンセプトは全然違います。
includeコンポーネントによって含まれているコンテンツはHTMLページのフラグメントです。そのコンテンツはHTMLページの一部分なので、コンテンツはデスクトップの一部でincludeコンポーネントの中のどのコンポーネントへもアクセスできます。include作業はサーバーで行われ、ブラウザはそれについて何の情報もないです。つまり、srcプロパティによって指定されたURLはどんな内部のリソースでも構いません。
iframeコンポーネントのコンテンツはブラウザによって、異なった一つのページとして、読み込まれます。独立したページとして読み込まれるので、コンテンツのフォーマットはHTMLと異なっています。例えばPDFファイルを埋め込むことができます。
<iframe src="/my.pdf"/> ...other HTML content
【ヒント】:デフォルトではボーダー(枠)はありません。ボーダーを使うには、スタイル属性を使用して指定します。例えば、<iframe style="border:1px inset" src="http://www.zkoss.org"/>
その埋め込みはIFRAMEタグを含んだHTMLページをインタープリットするときにブラウザによって行われます。つまり、そのURLはブラウザからアクセスできるリソースでなければなりません。
imageとaudioコンポーネント[48]のように、動的に生成されたコンテンツを指定できます。代表的な例はJasperReport[49]を使用して、バイナリ配列またはシステムの中でPDFレポートを生成します。レポートをorg.zkoss.util.media.Amediaクラスを使って結果をまとめて、iframeコンポーネントに報告します。
以下の例中では、クライアントがそのフォーマットをサポートする限り、iframeの使用によりどのコンテンツも埋め込むことができます。
<window title="iframe demo" border="normal"> <iframe id="iframe" width="95%"/> <separator bar="true"/> <button label="Upload"> <attribute name="onClick">{ Object media = Fileupload.get(); if (media != null) iframe.setContent(media); }</attribute> </button> </window>
ユーザーが iframe コンポーネントで他の URI (またはブックマーク)へナビゲートするとき、 org.zkoss.zk.ui.event.URIEvent クラスのオブジェクトが iframe コンポーネントへ送られます。
このイベントは通常、正ししコンテンツが後で復旧できるように、ステータスをブックマークするのに使用されます。
iframe コンポーネントが ZK ではないページを含むとき、onURIChange イベントは送信されません。例えば、iframe コンポーネントが PDF ページを含むとき、それは送信されません。
一方、他のテクノロジーを使用して iframe に ZK ページを置けば、次のように onIframeChange と呼ばれる JavaScript メソッドを 書くことによって、 URL をモニターすることができます。
//Part of your, say, PHP page <script type="text/script"> function onIframeChange(uuid, url) { do_whatever_you_need_in_the_technology_you_use(uuid, url); } </script>
ここで uuid は 要素の ID で、これは document.getElementById で取得できます。そして url は iframe がナビゲートされてきた新しい URL です。url がコンテクストパスを含むのに対して、 URIEvent.getURI() はそうではないことに注意。