今後10年を支えるWindowsアプリの条件Windows Liveが魅せる次世代マッシュアップ(3/5 ページ)

» 2006年11月28日 12時41分 公開
[大澤文孝,ITmedia]

 プログラムを見れば明らかなのだが、DOMで要素をそれぞれ作成するよりも、innerHTMLメソッドを使った方がはるかに簡単ということが分かる。

 しかし、例えばボタンやリンクを配置する場合には、そのボタンがクリックされた時の処理を定義したい時、イベントハンドラを結びつける必要がある。このため、DOM要素を追加するという方法を取ることになる。つまり、どちらの方法も理解しておく必要があるということだ。

 イベントハンドラについては、次回以降に改めて説明しよう。

iframeで外部HTMLを取り込む

 ところで、少し不作法ではあるが、Liveガジェットでは、HTMLのiframeタグを使って外部のURL指定でページを取り込むこともできる。

 例えば、Liveガジェットの内部に次のようなiframe要素を用意する。


m_el.innerHTML = 
  "<iframe src='http://www.itmedia.co.jp/' width='100%' height='150px'>";

 これにより、Liveガジェットがユーザーのもとで表示される時には、src属性に指定したhttp://www.itmedia.co.jp/index.htmlのWebページが埋め込まれるようになる(画面2)。

画面2■iframeを使った例

 この方法は、いわば、img srcで画像ファイルURLを指定し、画像を埋め込むのと同じだ。

 単に外部Webサイトの一部を差し込みたいという場面では、このような簡易な方法を取るのもよいだろう。

ネットワークプロキシを使う

 さて、実際のLiveガジェットでは、外部のWebサーバと通信して各種データを取得し、その内容をパースしたものを出力したいというケースも多いだろう。

 そのような時には、Windows Liveで提供されているネットワークプロキシを用いる。ネットワークプロキシを提供するのは、Web.Networkのクラスだ。

 このクラスを使うと、AJAXで使われるXMLHttpRequestクラスを使うのと同様に非同期でネットワーク通信ができる。そして、その結果をテキスト形式やDOMオブジェクトとして取得することができるのだ。

 Web.Networkクラスは、AJAXで使われるXMLHttpRequestクラスと異なり、ブラウザが通信するのではなくWindows Liveが実際のネットワーク通信を行うというものだ。

 そのため、XMLHttpRequestクラスのようにクロスドメインの問題は発生せず、どのようなWebサーバとでも通信でき、そのデータを取得することができるという特徴がある(図1)。

 ただしこれは逆に言えば、Web.Networkクラスを使ってコンテンツを取得する場合には、該当するWebサーバが、Windows Liveから接続可能でなければならないことを意味する。つまり、Liveガジェット本体とは違って、localhost上や社内からしかアクセスできないイントラネットのサーバ上などに配置したコンテンツを取得することはできないのだ。

 また当然だが、Webサーバに接続してきているのは、Windows Liveであるから、Webサーバのログに記録されるのは、Windows LiveのIPだ。つまりWebサーバ側では、実際のクライアントのIPアドレスを取得することはできないことに注意したい。

図1■Web.Networkクラスを使ったデータの取得

Copyright © ITmedia, Inc. All Rights Reserved.

注目のテーマ