ViewLink の概要
これは暫定的なドキュメンテーションであり、変更される可能性があります。
Microsoft® Internet Explorer 5.5 の新機能である ViewLink を使うと、Dynamic HTML (DHTML) でコンポーネントを開発することができます。ViewLink により、HTML コンポーネント (HTC) ファイルで作成されたコンテンツのカプセル化とレンダリングが可能になります。HTC ファイルの中に作成された HTML コンテンツは、ViewLink を通して、プライマリ (呼び出し元) HTML ドキュメントの中でレンダリングされ、ドキュメント フラグメントの内容がユーザーから見えるようになります。ViewLink は、リンクされたドキュメント フラグメントの構造をプライマリ ドキュメントから隠蔽することでカプセル化を実現します。
ViewLink が登場する前、HTML ドキュメントの中で使用されるカスタム コントロールを作成するためには、Microsoft® ActiveX® コントロールを使用するしかありませんでした。HTML 作成者は OBJECT タグを使って、ActiveX コントロールを自分のページに取り込む必要がありました。ActiveX コントロールのレンダリングを行うためには、クライアント マシンにコントロールがインストールされていなくてはなりませんでした。
ViewLink により、DHTML オーサーは、すでに慣れ親しんでいる DHTML を使って、独自のコントロールやその他のコンポーネントを開発することができます。また ViewLink では、コンポーネントは他の HTML タグと同じほど単純に使えるカスタム エレメントとしてインプリメントされるので、コンポーネントがはるかに使いやすくなります。ViewLink コンポーネントはプライマリ ドキュメントの一部としてダウンロードされ、レンダリングされるので、クライアント マシン上へのインストールは必要ありません。
このドキュメントでは以下のトピックを扱っています。
用語
このセクションでは、ViewLink 機能を説明するために使用される用語の定義を示します。
プライマリ ドキュメント |
ユーザーがブラウザを使って開く HTML ファイル。 |
ドキュメント フラグメント |
ViewLink 機能を使ってプライマリ ドキュメントにリンクされる、HTC ファイルの中に定義されたドキュメント ツリー。 |
エレメント ビヘイビア |
DHTML ビヘイビアを完全にエレメントにバインドできるようにする、Internet Explorer 5.5 の新機能。これにより、HTML ドキュメントの中で、エレメント ビヘイビアを他のエレメントと同じように使用することができ、ビヘイビアの機能が決してエレメントから削除されないことが保証されます。詳細については、エレメント ビヘイビアの項を参照してください。 |
マスタ エレメント |
ViewLink がアタッチされている Extensible Markup Language (XML) のカスタム エレメント。ViewLink により、ドキュメント フラグメントを、プライマリ ドキュメントの中のコンテンツとしてレンダリングすることができます。 |
ViewLink ドキュメント |
ドキュメント フラグメントと同じ。 |
ViewLink コンポーネントは、プライマリ ドキュメントの中で使用されるカスタム タグをインプリメントします。プライマリ ドキュメントの中のカスタム エレメントと、HTC ファイルの中に作成されたドキュメント フラグメントの間にリンクが確立されます。ViewLink コンポーネントを使用する Web 作成者は、プライマリ ドキュメントの中のスクリプトを通して、コンポーネントのビヘイビアやコンテンツを変更することはできません。プライマリ ドキュメントからのアクセス可能範囲は、コンポーネント作成者が公開することを選択したプロパティ、メソッド、およびイベントだけに限定されます。
DHTML コンポーネント
ViewLink では、OBJECT タグを通して使用できる Component Object Model (COM) オブジェクトに似た DHTML コンポーネントを開発することができます。開発者は、COM コンポーネントと同じように、DHTML コンポーネントのプロパティ、メソッド、およびイベントを公開することができます。コンポーネントは HTC ファイルの中に完全にカプセル化されています。
Microsoft® Internet Explorer 5 は、DHTML ビヘイビアの使用を通してスクリプトとビヘイビアを 2 つの異なるファイルとして保持し、開発するというカプセル化の最初のステップを実現していました。ビヘイビアにより、Web 作成者は目的の効果を HTC ファイルの中にカプセル化し、デザイナはカスケーディング スタイル シート (CSS) 属性を通してビヘイビアをメイン ページ上のエレメントに適用することができます。
次に、ビヘイビアを使用するプライマリ ドキュメントのコードを示します。
<HTML>
<HEAD>
<TITLE>Behavior Example</TITLE>
</HEAD>
<BODY>
This text uses a behavior to make text both
<SPAN STYLE="behavior:url(italic_bold.htc)">
italic and bold
</SPAN>.
</BODY>
</HTML>
次に HTC ファイルのコードを示します。
<!-- italic_bold.htc -->
<SCRIPT>
element.style.fontWeight = "bold";
element.style.fontStyle = "italic";
</SCRIPT>
この機能を使用するためには、Microsoft® Internet Explorer 5.0 またはそれ以降が必要です。下のアイコンをクリックすると最新バージョンがインストールされます。その後、このページを再ロードしてサンプルを表示してください。
上のインプリメンテーションは、スクリプトをコンテンツから分離するという点では有用ですが、既存のタグにしか適用できないという問題があります。Internet Explorer 5.5 では、エレメント ビヘイビアを使って、プライマリ ドキュメントの中のコンテンツに対して回り込みを行えるカスタム タグを作成することができます。プライマリ ドキュメントのコンテンツは、ビヘイビアのコードの影響を受けます。
次に、エレメント ビヘイビアを使用するドキュメントのコードを示します。
<HTML XMLNS:IE>
<HEAD>
<?IMPORT NAMESPACE="IE" IMPLEMENTATION="elem_behavior.htc"/>
</HEAD>
<BODY>
This text uses an element behavior to make text both
<IE:IB>italic and bold</IE:IB>.
</BODY>
</HTML>
次に HTC ファイルのコードを示します。
<!-- elem_behavior.htc -->
<PUBLIC:COMPONENT tagName=IB>
</PUBLIC:COMPONENT>
<SCRIPT LANGUAGE="JScript">
element.style.fontWeight = "bold";
element.style.fontStyle = "italic";
</SCRIPT>
この機能を使用するためには、Microsoft® Internet Explorer 5.5 またはそれ以降が必要です。下のアイコンをクリックすると最新バージョンがインストールされます。その後、このページを再ロードしてサンプルを表示してください。
上の例で、プライマリ ドキュメントの中の IMPORT 処理命令は、カスタム エレメントのビヘイビアをインプリメントするファイルを指定しています。
ViewLink の実装
このセクションでは、単純な ViewLink コンポーネントを実装する方法について説明します。プライマリ ドキュメントとドキュメント フラグメントの間に ViewLink をセットアップする方法には、プログラム的な方法と宣言的な方法の 2 つがあります。
プライマリ ドキュメントとドキュメント フラグメントの間にプログラム的に ViewLink をセットアップするには、次の文を使用します。この文は HTC ファイル内のスクリプトの中に置かれます。
defaults.viewLink=document;
ViewLink は宣言的に確立することもできます。次の例は、HTC ファイルの中のドキュメント フラグメントのルート エレメントを、プライマリ ドキュメントの中のマスタ エレメントに自動的にリンクします。
<PUBLIC:DEFAULTS viewLinkContent/>
プライマリ ドキュメントと名前空間
ViewLink 機能では、プライマリ ドキュメントの中で XML 名前空間を使用する必要があります。開発者は、プライマリ ドキュメントの中で名前空間を宣言し、カスタム タグにはその名前空間をプレフィックスとして付けなくてはなりません。ViewLink コンポーネントのインプリメンテーションを名前空間に関連付けるには、IMPORT 処理命令を使用します。次の例は、Toolbar_Button.htc という名前のファイル中にインプリメントされている、TOOLBAR_BUTTON という名前のカスタム タグを使用するプライマリ ドキュメントを示しています。
<HTML XMLNS:IE>
<HEAD>
<?IMPORT NAMESPACE="IE" IMPLEMENTATION="Toolbar_Button.htc">
</HEAD>
<BODY>
<IE:TOOLBAR_BUTTON> </IE:TOOLBAR_BUTTON>
</BODY>
</HTML>
タグの IE: 宣言は、カスタム タグの名前空間を宣言するために必要です。IMPORT 処理命令は、それが処理命令であり、通常のエレメントではないことを示すために、疑問符 (?) を前に付けます。
HTC ファイル
ViewLink コードは、PUBLIC:COMPONENT タグと BODY タグの 2 つのセクションを含んでいる HTC ファイルの中に置かれます。次に、宣言的な構文を使って、PUBLIC:DEFAULTS オブジェクトに ViewLink を設定する単純な HTC ファイルを示します。
<!-- Toobar_Button.htc -->
<PUBLIC:COMPONENT tagName=TOOLBAR_BUTTON>
<PUBLIC:DEFAULTS viewLinkContent/>
</PUBLIC:COMPONENT>
<BODY>
Some day this will be a toolbar button.
</BODY>
例
次の HTC ファイルの例は、ツールバー ボタンをインプリメントしています。マウス ポインタをボタンの上に移動すると、3-D 効果が現れます。この効果は、マウス ポインタをボタンから離すと消えます。
<!-- Toolbar_Button.htc -->
<HEAD>
<PUBLIC:COMPONENT tagName=TOOLBAR_BUTTON>
<ATTACH event="oncontentready" onevent="fnInit()"/>
</PUBLIC:COMPONENT>
<STYLE>
.clsButton { background-color:#D6D3CE;
border:solid 1px;
border-color:#D6D3CE;
}
</STYLE>
<SCRIPT LANGUAGE="JScript">
// Entry point
function fnInit()
{
var oButton = document.body;
oButton.className = "clsButton";
oButton.innerHTML = " " + element.innerHTML + " ";
defaults.viewLink = document;
}
// Mouse handler functions
function fnMouseOver()
{
var oButton = document.body;
oButton.style.borderColor = "ThreeDHighlight " +
"ThreeDDarkShadow " +
"ThreeDDarkShadow " +
"ThreeDHighlight";
oButton.style.cursor = "hand";
}
function fnMouseOut()
{
var oButton = document.body;
oButton.style.borderColor = "#D6D3CE";
oButton.style.cursor = "default";
}
function fnOnMouseDown()
{
var oButton = document.body;
oButton.style.borderColor = "ThreeDDarkShadow " +
"ThreeDHighlight " +
"ThreeDHighlight " +
"ThreeDDarkShadow";
}
function fnOnMouseUp()
{
var oButton = document.body;
oButton.style.borderColor = "ThreeDHighlight " +
"ThreeDDarkShadow " +
"ThreeDDarkShadow " +
"ThreeDHighlight";
}
</SCRIPT>
</HEAD>
<BODY onmouseover="fnMouseOver()"
onmouseout="fnMouseOut()"
onmousedown="fnOnMouseDown()"
onmouseup="fnOnMouseUp()">
</BODY>
次のファイルは、インプリメントされたツールバー ボタンを使用するプライマリ ドキュメントです。
<!-- Toolbar_Button.htm -->
<HTML XMLNS:IE>
<HEAD>
<TITLE>Toolbar Button Demo</TITLE>
<?IMPORT namespace="IE" implementation="Toolbar_Button.htc">
<STYLE>
.clsButton { font-family:Arial,Helvetia,sans serif;
font-size:12;
}
</STYLE>
<SCRIPT>
function fnClick()
{
alert("You clicked: " + window.event.srcElement.innerText);
}
</SCRIPT>
</HEAD>
<BODY>
<!-- DIV for the toolbar with TOOLBAR_BUTTONs inside. -->
<DIV STYLE="background-color:#D6D3CE;">
<IE:TOOLBAR_BUTTON CLASS="clsButton" onclick="fnClick()">
<U>N</U>ew
</IE:TOOLBAR_BUTTON>
<IE:TOOLBAR_BUTTON CLASS="clsButton" onclick="fnClick()">
<U>O</U>pen
</IE:TOOLBAR_BUTTON>
<IE:TOOLBAR_BUTTON CLASS="clsButton" onclick="fnClick()">
<U>S</U>ave
</IE:TOOLBAR_BUTTON>
<IE:TOOLBAR_BUTTON CLASS="clsButton" onclick="fnClick()">
Save <U>A</U>s...
</IE:TOOLBAR_BUTTON>
</DIV>
</BODY>
</HTML>
この機能を使用するためには、Microsoft® Internet Explorer 5.5 またはそれ以降が必要です。下のアイコンをクリックすると最新バージョンがインストールされます。その後、このページを再ロードしてサンプルを表示してください。
CSS の継承
高さ、幅、およびフォントの色など、カスタム エレメントに直接に適用されるスタイルは、ViewLink コンポーネントに影響を与えます。ドキュメント フラグメントはプライマリ ドキュメントのスタイルを継承しますが、コンポーネントの作成者はプライマリ ドキュメントで設定されているスタイルをオーバーライドすることができます。HTC ファイルで設定されたスタイルは、プライマリ ドキュメントの中のカスタム タグに適用されたスタイルよりも優先されます。
前のセクションの例では、適切な CSS スタイルを適用することで、ボタンのフォントを太字に変更することができます。例:
<IE:TOOLBAR_BUTTON CLASS="clsButton" onclick="fnClick()" STYLE="font-weight:bold">
<U>N</U>ew
</IE:TOOLBAR_BUTTON>
この機能を使用するためには、Microsoft® Internet Explorer 5.5 またはそれ以降が必要です。下のアイコンをクリックすると最新バージョンがインストールされます。その後、このページを再ロードしてサンプルを表示してください。
color の CSS スタイルを適用して、ボタンのテキスト カラーを変更することはできません。これは、ViewLink コンポーネントが、HTC ファイルの STYLE ブロックで color を設定して、プライマリ ドキュメントで設定されているスタイルをオーバーライドしているためです。
<STYLE>
.clsButton { color:#0000FF;
background-color:#D6D3CE;
border:solid 1px;
border-color:#D6D3CE;
}
</STYLE>
イベント ルーティング
このセクションでは、ViewLink コンポーネントの中で起こされたイベントが、プライマリ ドキュメントから見てどのように処理されるかについて説明します。また、どのようなイベントがドキュメント フラグメントからプライマリ ドキュメントに対して起こされるのか、どのようなイベントが起こされないのか、またどのようなイベントに特に注意を払わなくてはならないかも説明します。
HTC ファイルの中の DIV オブジェクトで onclick イベントが発生されると、そのイベントはルート エレメントに達するまで、HTC ファイルのツリーの中を昇っていきます。イベントの発生がなければ、この onclick イベントは HTC に対してローカルなままで、プライマリ ドキュメントからは見えません。しかし、Internet Explorer 5.5 では、イベントを自動的にプライマリ ドキュメントに対して発生させるようになっています。さらに、イベントはマスタ エレメントに対して発生し、それが上へと昇っていくイベントであれば、プライマリ ドキュメントのツリーの中で昇っていきます。プライマリ ドキュメント ツリーのどのエレメントからも、このイベントはマスタ エレメント タグから発したイベントのように見えます。
一般に、上に上っていくイベントは ViewLink コンポーネントで発生し、昇っていかないイベントは発生しません。ただし、どのイベントが発生するかを判断する際には、他の点も考慮する必要があります。マウスやキーボードに関わるような大部分のユーザー イベントは発生します。また、一般的な ViewLink シナリオで使用されるイベントも、マスタ エレメントに対して起こされます。
特殊ケースのイベント
イベントがプライマリ ドキュメントの中で発生すると、ViewLink のマスタ エレメントは、プライマリ ドキュメント中の他のタグと同じように振る舞います。たとえば、ユーザーが ViewLink コンポーネント上にマウス ポインタを移動すると、マスタ エレメント上で onmouseover イベントが発生します。ユーザーがコンポーネントからマウス ポインタを離すと、マスタ エレメント上で onmouseout イベントが発生します。しかし、ユーザーがマウス ポインタを ViewLink コンポーネント中のエレメント上に移動した場合には、onmouseover イベントも onmouseout イベントもプライマリ ドキュメントに対して発生されることはありません。このため、マウスおよびフォーカス イベントがマスタ エレメントに対して発生されたことを示す特殊ケースのイベントが作られています。
マウス イベント
onmouseover および onmouseout イベントは、HTC ツリーの中の最上位エレメント上で、それぞれ onmouseenter および onmouseleave エレメントが発生した場合にのみ、マスタ エレメント上で発生します。
onmouseenter および onmouseleave イベントは上に昇っていかず、キャンセルすることもできません。onmouseenter イベントは、マウス ポインタがエレメントに入ったときに発生し、onmouseleave イベントは、ポインタがエレメントを離れたときに発生します。鍵は、これらのイベントが上に昇らないという点にあります。このため、これらの HTC 内のイベントがプライマリ ドキュメント上で起こるするのは、それらが HTC ツリーのルート エレメント上で発生した場合に限られます。
たとえば、ルート エレメント上で onmouseenter が発生すると、onmouseenter および onmouseover イベントの両方がマスタ エレメント上で発生します。onmouseleave イベントとそれに対応する onmouseout イベントについても、同じアクションが起こります。
その結果、ユーザーがプライマリ ドキュメントの中のマスタ エレメント上にマウス ポインタを移動すると、onmouseover イベントが 1 回発生します。ユーザーがマスタ エレメントからマウス ポインタを離すと、onmouseout イベントが 1 回発生します。ユーザーが ViewLink コンポーネントの中のエレメントの上にマウス ポインタを移動したり、そこからマウス ポインタを離した場合、マスタ エレメントに対して onmouseover または onmouseout イベントが発生することはなく、HTC ファイルに対してローカルな影響しか及びません。
フォーカスおよびブラー (Blur) イベント
上記のマウス イベントについて説明した関係は、onactivate と onfocus の間、および ondeactivate と onblur の間にも見られます。たとえば、ユーザーがコンポーネントの中の異なるエレメントの間でフォーカスを移動したときにも、マスタ エレメント上で複数のフォーカス/ブラー イベントが発生するのは望ましくなく、またその間もマスタ エレメントはフォーカスを失わないようになっている必要があります。そのため、これらのフォーカス イベントはマウス イベントと同じように扱われることになります。onfocusenter および onfocusleave イベントはキャンセルできません。HTCツリーのルート エレメント上で onfocusenter および onfocusleave イベントが発生すると、プライマリ ドキュメントのマスタ エレメント上で、それぞれ onfocus および onblur イベントが発生します。
onbeforefocusenter および onbeforefocusleave イベントは上に昇っていきませんが、キャンセルすることはできます。これらのイベントにも、上で述べたのと同じシナリオが適用されます。たとえば、ユーザーがコンポーネント中の 2 つの要素間でタブ移動を行っているときに、マスタ エレメント上で複数のイベントが発生するのは望ましくありません。このため、マスタ エレメント上では、HTC ツリーのルート エレメント上でのイベントだけが発生するようになっています。また、これらのイベントはキャンセルできるので、マスタ エレメントのフォーカスをキャンセルすることが可能です。
自動的に発生しないイベント
ドキュメント フラグメントからマスタ エレメントに対して自動的に発生しないイベントも、スクリプトを通して発生させることができます。次の例は、HTC ファイルからプライマリ ドキュメントに対して手動でイベントを発生させる方法を示しています。
<!-- HTC file -->
<PUBLIC:COMPONENT tagName="ABC"/>
<PUBLIC:DEFAULTS viewLinkContent/>
<BODY>
<DIV onmouseover="element.fireEvent('onmouseover', event)">
Move the mouse over this text.
</DIV>
</BODY>
ViewLink の中でのタブ指定
ViewLink 機能には、1 つのタグが複数のエレメントを含むことができる新しいコンポーネント モデルが導入されています。これらのエレメントはタブ オーダーに参加することができます。この状況を処理するために、tabIndex プロパティのモデルが拡張されました。
ドキュメント フラグメントの中でのタブ指定は、プライマリ ドキュメントのタブ シーケンスとは独立にカプセル化されています。ドキュメント フラグメントの中のオブジェクトは、その tabIndex に基づいて独自のタブ シーケンスに従います。
また、マスタ エレメントは、タグの初期状態を指定する tabStop という名前の保護属性を持っています。
ViewLink のネスト
HTC ファイルは他の ViewLink コンポーネントにリンクすることができます。カレンダの ViewLink の例を考えてみましょう。カレンダ内の個々の日は、その日の予定を含んでいるポップアップ ウィンドウを表示する別の ViewLink コンポーネントによって表現することができます。このとき CALENDAR タグの HTC ファイルには、DAY オブジェクトをインプリメントしている HTC ファイルへのリンクを提供する IMPORT 処理命令を持たせることになります。
次に、このシナリオのためのプライマリ ドキュメントを示します。
<HTML XMLNS:IE>
<HEAD>
<TITLE>Calendar Example</TITLE>
<?IMPORT NAMESPACE="IE" IMPLEMENTATION="calendar.htc"/>
</HEAD>
<BODY>
<P>Click a day in the calendar...</P>
<IE:CALENDAR/>
</BODY>
</HTML>
次に、CALENDAR タグをインプリメントする HTC ファイルを示します。
<HTML XMLNS:IE>
<HEAD>
<?IMPORT NAMESPACE="IE" IMPLEMENTATION="day.htc"/>
<PUBLIC:COMPONENT tagName="CALENDAR">
<ATTACH EVENT="oncontentready" ONEVENT="fnInit()"/>
</PUBLIC:COMPONENT>
<SCRIPT>
function fnInit()
{
defaults.viewLink = document;
}
</SCRIPT>
<STYLE>
TD { text-align:center;
border:solid 1px;
cell-padding:2;
cell-spacing:2;
width:50;
height:50;
}
</STYLE>
</HEAD>
<BODY>
<TABLE STYLE="border:solid 1px; cell-padding:2; cell-spacing:2;">
<TR>
<TH>Sun</TH>
<TH>Mon</TH>
<TH>Tue</TH>
<TH>Wed</TH>
<TH>Thu</TH>
<TH>Fri</TH>
<TH>Sat</TH>
</TR>
<TR>
<TD><IE:DAY value="1"/></TD>
<TD><IE:DAY value="2"/></TD>
<TD><IE:DAY value="3"/></TD>
<TD><IE:DAY value="4"/></TD>
<TD><IE:DAY value="5"/></TD>
<TD><IE:DAY value="6"/></TD>
<TD><IE:DAY value="7"/></TD>
</TR>
<TR>
<TD><IE:DAY value="8"/></TD>
<TD><IE:DAY value="9"/></TD>
<TD><IE:DAY value="10"/></TD>
<TD><IE:DAY value="11"/></TD>
<TD><IE:DAY value="12"/></TD>
<TD><IE:DAY value="13"/></TD>
<TD><IE:DAY value="14"/></TD>
</TR>
<TR>
<TD><IE:DAY value="15"/></TD>
<TD><IE:DAY value="16"/></TD>
<TD><IE:DAY value="17"/></TD>
<TD><IE:DAY value="18"/></TD>
<TD><IE:DAY value="19"/></TD>
<TD><IE:DAY value="20"/></TD>
<TD><IE:DAY value="21"/></TD>
</TR>
<TR>
<TD><IE:DAY value="22"/></TD>
<TD><IE:DAY value="23"/></TD>
<TD><IE:DAY value="24"/></TD>
<TD><IE:DAY value="25"/></TD>
<TD><IE:DAY value="26"/></TD>
<TD><IE:DAY value="27"/></TD>
<TD><IE:DAY value="28"/></TD>
</TR>
<TR>
<TD><IE:DAY value="29"/></TD>
<TD><IE:DAY value="30"/></TD>
<TD><IE:DAY value="31"/></TD>
</TR>
</TABLE>
</BODY>
</HTML>
最後に、DAY タグをインプリメントする HTC を示します。
<HTML XMLNS:IE>
<HEAD>
<PUBLIC:COMPONENT tagName="DAY">
<PROPERTY NAME="value"/>
<ATTACH EVENT="oncontentready" ONEVENT="fnInit()"/>
</PUBLIC:COMPONENT>
<STYLE>
.clsDay { width:50;
height:50;
background-color:lightyellow;
align:center;
}
</STYLE>
<SCRIPT>
function fnInit()
{
document.body.innerText = element.value;
document.body.className = "clsDay";
defaults.viewLink = document;
}
function fnShowAppts()
{
alert("Show appointments for day " + element.value + "!");
}
</SCRIPT>
</HEAD>
<BODY onclick="fnShowAppts()">
</BODY>
</HTML>
この機能を使用するためには、Microsoft® Internet Explorer 5.5 またはそれ以降が必要です。下のアイコンをクリックすると最新バージョンがインストールされます。その後、このページを再ロードしてサンプルを表示してください。
|