HTML コンテンツのブラウザー形式のユーザーインターフェイスの定義Adobe AIR 1.0 およびそれ以降 JavaScript には、HTML コンテンツを表示するウィンドウを制御するための API がいくつか用意されています。AIR では、これらの API はカスタム HTMLHost クラスを実装してオーバーライドできます。 HTMLHost クラスの拡張について例えば、アプリケーションで複数の HTMLLoader オブジェクトをタブ付きインターフェイスに表示する場合、読み込まれた HTML ページによってタイトルを変更する際に、メインウィンドウのタイトルではなく、タブのラベルを変更したい場合があります。同様に、コードで、window.moveTo() 呼び出しへの応答として、親表示オブジェクトコンテナ内で HTMLLoader オブジェクトの位置を変更したり、HTMLLoader オブジェクトを含むウィンドウを移動したり、何も行わなかったり、まったく別の操作を行ったりすることもできます。 AIR HTMLHost クラスは、次の JavaScript プロパティとメソッドを制御します。
new HTMLLoader() を使用して HTMLLoader オブジェクトを作成した場合、上記の JavaScript プロパティまたはメソッドは有効になりません。HTMLHost クラスは、これらの JavaScript API のデフォルトのブラウザー形式の実装を提供します。HTMLHost クラスを拡張して、動作をカスタマイズすることもできます。デフォルトの動作をサポートする HTMLHost オブジェクトを作成するには、HTMLHost コンストラクターの defaultBehaviors パラメーターを true に設定します。 var defaultHost:HTMLHost = new HTMLHost(true); AIR で、HTMLLoader クラスの createRootWindow() メソッドを使用して HTML ウィンドウを作成する場合は、デフォルトの動作をサポートする HTMLHost インスタンスが自動的に割り当てられます。ホストオブジェクトの動作を変更するには、別の HTMLHost 実装を HTMLLoader の htmlHost プロパティに割り当てます。また、このプロパティに null を割り当てて、機能全体を無効にすることもできます。 注意: AIR では、HTML ベースの AIR アプリケーション用に作成された初期ウィンドウと、JavaScript の window.open() メソッドのデフォルト実装によって作成されたすべてのウィンドウに、デフォルトの HTMLHost オブジェクトが割り当てられます。
例:HTMLHost クラスの拡張次の例では、HTMLHost クラスを拡張して、HTMLLoader オブジェクトがユーザーインターフェイスに及ぼす影響をカスタマイズする方法を示します。 Flex の例:
ここで示したコードをテストするには、次のコンテンツを含む HTML ファイルをアプリケーションディレクトリに含めます。 <html>
<head>
<title>Test</title>
</head>
<script>
function openWindow()
{
window.runtime.trace("in");
document.title = "foo"
window.open('Test.html');
window.runtime.trace("out");
}
</script>
<body>
<a href="#" onclick="openWindow()">window.open('Test.html')</a>
</body>
</html>
Flash Professional の例:
window.location プロパティの変更の処理locationChange() メソッドをオーバーライドして、HTML ページの URL の変更を処理します。locationChange() メソッドは、ページの JavaScript で window.location の値を変更するときに呼び出されます。次の例では、要求された URL を読み込んでいます。 override public function updateLocation(locationURL:String):void
{
htmlLoader.load(new URLRequest(locationURL));
}
注意: HTMLHost オブジェクトの htmlLoader プロパティを使用して、現在の HTMLLoader オブジェクトを参照できます。
window.moveBy()、window.moveTo()、window.resizeTo()、window.resizeBy() の JavaScript 呼び出しの処理set windowRect() メソッドをオーバーライドして、HTML コンテンツの境界の変更を処理します。set windowRect() メソッドは、ページの JavaScript から window.moveBy()、window.moveTo()、window.resizeTo() または window.resizeBy() を呼び出すときに呼び出されます。次の例では、デスクトップウィンドウの境界を更新します。 override public function set windowRect(value:Rectangle):void
{
htmlLoader.stage.nativeWindow.bounds = value;
}
window.open() の JavaScript 呼び出しの処理createWindow() メソッドをオーバーライドして、window.open() の JavaScript 呼び出しを処理します。createWindow() メソッドの実装は、新しい HTMLLoader オブジェクトを作成して返します。通常、HTMLLoader は新しいウィンドウに表示しますが、ウィンドウの作成は必須ではありません。 次の例では、createWindow() 関数を HTMLLoader.createRootWindow() で実装し、ウィンドウと HTMLLoader オブジェクトの両方を作成する方法を示します。NativeWindow オブジェクトを別個に作成し、HTMLLoader をウィンドウステージに追加することもできます。 override public function createWindow(windowCreateOptions:HTMLWindowCreateOptions):HTMLLoader{
var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(windowCreateOptions.x, windowCreateOptions.y,
windowCreateOptions.width, windowCreateOptions.height);
var htmlControl:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions,
windowCreateOptions.scrollBarsVisible, bounds);
htmlControl.htmlHost = new HTMLHostImplementation();
if(windowCreateOptions.fullscreen){
htmlControl.stage.displayState = StageDisplayState.FULL_SCREEN_INTERACTIVE;
}
return htmlControl;
}
注意: この例では、window.open() で作成した新しいウィンドウにカスタム HTMLHost 実装を割り当てます。必要に応じて、別の実装を使用したり、新しいウィンドウの htmlHost プロパティを null に設定したりすることもできます。
createWindow() メソッドにパラメーターとして渡されるオブジェクトは HTMLWindowCreateOptions オブジェクトです。HTMLWindowCreateOptions クラスには、features パラメーターストリング(window.open() の呼び出しで使用)の設定値を知らせるプロパティがあります。
HTMLLoader クラスは、features ストリングで指定できる機能の一部は実装していません。スクロールバー、ロケーションバー、メニューバー、ステータスバーおよびツールバーは、必要に応じてアプリケーションで用意する必要があります。 JavaScript の window.open() メソッドのその他の引数は、システムによって処理されます。createWindow() の実装では、HTMLLoader オブジェクトにコンテンツを読み込んだり、ウィンドウタイトルを設定したりしないでください。 window.close() の JavaScript 呼び出しの処理windowClose() をオーバーライドして、window.close() メソッドの JavaScript 呼び出しを処理します。次の例では、window.close() メソッドが呼び出されたときにデスクトップウィンドウを閉じます。 override public function windowClose():void
{
htmlLoader.stage.nativeWindow.close();
}
window.close() の JavaScript 呼び出しでは、必ずしもコンテナウィンドウを閉じる必要はありません。例えば、次のコードのように、ウィンドウ(他のコンテンツを含んでいるウィンドウ)を開いたまま、表示リストから HTMLLoader を削除することもできます。 override public function windowClose():void
{
htmlLoader.parent.removeChild(htmlLoader);
}
window.status プロパティの変更の処理updateStatus() メソッドをオーバーライドして、JavaScript による window.status の値の変更を処理します。次の例では、ステータス値をトレースします。 override public function updateStatus(status:String):void
{
trace(status);
}
要求されたステータスが、updateStatus() メソッドにストリングとして渡されます。 HTMLLoader オブジェクトにステータスバーはありません。 window.document.title プロパティの変更の処理updateTitle() メソッドをオーバーライドして、JavaScript による window.document.title の値の変更を処理します。次の例では、ウィンドウタイトルを変更し、「Sample」というストリングをタイトルに追加します。 override public function updateTitle(title:String):void
{
htmlLoader.stage.nativeWindow.title = title + " - Sample";
}
document.title が HTML ページで設定されると、要求されたタイトルが updateTitle() メソッドにストリングとして渡されます。 document.title の変更では、必ずしも HTMLLoader オブジェクトを含むウィンドウのタイトルを変更する必要はありません。例えば、テキストフィールドなど、別のインターフェイスエレメントを変更することもできます。 window.blur() と window.focus() の JavaScript 呼び出しの処理windowBlur() メソッドと windowFocus() メソッドをオーバーライドして、window.blur() と window.focus() の JavaScript 呼び出しを処理します。この例を次に示します。 override public function windowBlur():void
{
htmlLoader.alpha = 0.5;
}
override public function windowFocus():void
{
htmlLoader.alpha = 1.0;
NativeApplication.nativeApplication.activate(htmlLoader.stage.nativeWindow);
}
注意: AIR には、ウィンドウまたはアプリケーションを非アクティブ化するための API はありません。
スクロールする HTML コンテンツを含むウィンドウの作成HTMLLoader クラスには HTMLLoader.createRootWindow() という静的メソッドがあり、このメソッドを使用すると、HTMLLoader オブジェクトを含む新しいウィンドウ(NativeWindow オブジェクトによって表されるウィンドウ)を開き、そのウィンドウのユーザーインターフェイス設定を定義することができます。このメソッドは、ユーザーインターフェイスの定義に使用できる 4 つのパラメーターを受け取ります。
例えば、次のコードでは、HTMLLoader.createRootWindow() メソッドを使用して、スクロールバーを使用する HTMLLoader コンテンツを含むウィンドウを作成します。 var initOptions:NativeWindowInitOptions = new NativeWindowInitOptions();
var bounds:Rectangle = new Rectangle(10, 10, 600, 400);
var html2:HTMLLoader = HTMLLoader.createRootWindow(true, initOptions, true, bounds);
var urlReq2:URLRequest = new URLRequest("http://www.example.com");
html2.load(urlReq2);
html2.stage.nativeWindow.activate();
注意: JavaScript で createRootWindow() を直接呼び出すことによって作成されたウィンドウは、そのウィンドウを開いた HTML ウィンドウから独立したままになります。例えば、JavaScript ウィンドウの opener プロパティと parent プロパティは null になります。ただし、createRootWindow() を、HTMLHost の createWindow() メソッドをオーバーライドして createRootWindow() を呼び出すことによって間接的に呼び出した場合には、opener と parent は、そのウィンドウを開いた HTML ウィンドウを参照します。
|
|