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が見つかりました。 |
なお、
