Home   Single Page

iframeコンポーネント

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>

この画像はユーザーがマイクロソフトのパワーポイントファイルをアップロードした後の画像です。

onURIChange イベント

ユーザーが iframe コンポーネントで他の URI (またはブックマーク)へナビゲートするとき、 org.zkoss.zk.ui.event.URIEvent クラスのオブジェクトが iframe コンポーネントへ送られます。
このイベントは通常、正ししコンテンツが後で復旧できるように、ステータスをブックマークするのに使用されます。

他のテクノロジーとの統合
Integrate with Other Technologies

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



[48] 多くの面で、iframe は image と audio と類似しています。任意の内容のコンポーネントとして考慮すると良いでしょう。.

[49] http://jasperreports.sourceforge.net