HTMLの表示
Adobe AIRにはSafari等のブラウザで採用されているWebKitエンジンが実装されており、
HTMLの表示方法はとても簡単です。まずはFlashでの実装方法から見てみましょう。次のサンプルはステージにgihyo.
import flash.html.HTMLControl;
var html:HTMLControl = new HTMLControl();
html.width = stage.stageWidth;
html.height = stage.stageHeight;
html.load(new URLRequest("http://gihyo.jp/"));
addChild(html);
AIR APIでHTMLコンテンツの処理を担当するのはHTMLControlクラス
なお、
stage.align = StageAlign.TOP_LEFT;
stage.scaleMode = StageScaleMode.NO_SCALE;
stage.addEventListener(Event.RESIZE, stageResizeHandler);
function stageResizeHandler(e:Event):void {
html.width = stage.stageWidth;
html.height = stage.stageHeight;
}
続いてFlex Builderでの実装方法です。Flex BuilderにはHTMLコンテンツを表示するためのHTMLコンポーネントがあるので、
<?xml version="1.0" encoding="utf-8"?>
<mx:WindowedApplication xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute">
<mx:HTML x="0" y="0" width="100%" height="100%" location="http://gihyo.jp/"/>
</mx:WindowedApplication>
このようにHTMLコンポーネントを配置して、
Flashでのスクロールバー
Flex BuilderのHTMLコンポーネントにはもともとスクロールバーが付いていますが、
| プロパティ | 値 |
|---|---|
| width:Number | HTMLControlオブジェクトの幅 |
| height:Number | HTMLControlオブジェクトの高さ |
| htmlWidth:Number | HTMLコンテンツの幅 |
| htmlHeight:Number | HTMLコンテンツの高さ |
| scrollH:Number | 水平方向のスクロール位置 |
| scrollV:Number | 垂直方向のスクロール位置 |
スクロールの最大値は、
var maxScrollH:Number = html.htmlWidth - html.width;
var maxScrollV:Number = html.htmlHeight - html.height;
html.scrollH = maxScrollH;
html.scrollV = maxScrollV;
履歴の移動
ウェブブラウザのようなアプリーケーションを作成する際は、
| メソッド/ | 命令/ |
|---|---|
| historyBack() | 戻る |
| historyForward() | 進む |
| historyGo() | 指定したステップ数移動する |
| getHistoryAt() | 指定した位置のエントリを取得する |
| historyLength:uint | 履歴リストの長さ |
| historyPosition:uint | 履歴リスト内の現在の位置 |
次のコードは戻る/
prev_btn.addEventListener(MouseEvent.CLICK, prevClickHandler);
next_btn.addEventListener(MouseEvent.CLICK, nextClickHandler);
function prevClickHandler(e:MouseEvent):void {
html.historyBack();
}
function nextClickHandler(e:MouseEvent):void {
html.historyForward();
}
なお、
動的にHTMLを作成する
外部のHTMLを読み込む以外に、
import flash.html.HTMLControl;
var js:String = 'function jsFunc() { return "Hell from JS." }';
var xhtml:XML =
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script>{js}</script>
</head>
<body>
<p id="msg">StringからつくったHTML</p>
</body>
</html>
var html:HTMLControl = new HTMLControl();
html.width = stage.stageWidth;
html.height = stage.stageHeight;
html.loadString(xhtml.toString());
addChild(html);
Flashでは、
DOMへのアクセス
アプリケーションSandBox内のSWFコンテンツは、
html.addEventListener(Event.COMPLETE, completeHandler);
function completeHandler(e:Event):void {
trace(html.window.document.getElementById("msg").innerHTML);
trace(html.window.jsFunc());
html.window.document.getElementById("msg").innerHTML = "HTMLを書き換えました";
}
このように、
HTML関連のイベント
HTMLControlクラスでは、
| イベント | 発生タイミング |
|---|---|
| Event. | 読み込み処理が完了してHTMLページのonloadイベントが発生した直後。 |
| Event. | HTMLドキュメント作成後、 |
| Event. | htmlWidthまたはhtmlHeightプロパティが変わった時。 |
| Event. | コンテンツの表示内容が更新された時。 |
| Event. | locationプロパティが変わった時。 |
| Event. | scrollHまたはscrollVプロパティが変わった時。 |
| HTMLUncaughtJavaScriptExceptionEvent. UNCAUGHT_ (※実際は改行しません) | JavaScript側でキャッチしていない例外が発生した時。 |
PDFの表示
HTMLControlオブジェクトのload()メソッドあるいはHTMLコンポーネントのlocationプロパティにPDFファイルのURLを渡すことで、
import flash.html.HTMLControl;
import flash.html.HTMLPDFCapability;
if (HTMLControl.pdfCapability == HTMLPDFCapability.STATUS_OK) {
trace("PDFの表示が可能です。");
}
上記コードから分かるように、
| 定数 | 意味 |
|---|---|
| ERROR_ | Adobe Readerが見つかりません。 |
| ERROR_ | Adobe Readerが見つかりましたが、 |
| ERROR_ | 適したバージョンのAdobe Readerが見つかりましたが、 |
| STATUS_ | 適したバージョンのAdobe Readerが見つかりました。 |
なお、
