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() はそうではないことに注意。